๊ธฐ๋ก๋ฐฉ

BOJ_1057 : ํ† ๋„ˆ๋จผํŠธ ๋ณธ๋ฌธ

CodingTest/Java

BOJ_1057 : ํ† ๋„ˆ๋จผํŠธ

Soom_1n 2023. 1. 1. 20:36

๐Ÿ‘‰ ๋ฌธ์ œ๋งํฌ

 

1057๋ฒˆ: ํ† ๋„ˆ๋จผํŠธ

๊น€์ง€๋ฏผ์€ N๋ช…์ด ์ฐธ๊ฐ€ํ•˜๋Š” ์Šคํƒ€ ํ† ๋„ˆ๋จผํŠธ์— ์ง„์ถœํ–ˆ๋‹ค. ํ† ๋„ˆ๋จผํŠธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ง„ํ–‰๋œ๋‹ค. ์ผ๋‹จ N๋ช…์˜ ์ฐธ๊ฐ€์ž๋Š” ๋ฒˆํ˜ธ๊ฐ€ 1๋ฒˆ๋ถ€ํ„ฐ N๋ฒˆ๊นŒ์ง€ ๋ฐฐ์ •๋ฐ›๋Š”๋‹ค. ๊ทธ๋Ÿฌ๊ณ  ๋‚œ ํ›„์— ์„œ๋กœ ์ธ์ ‘ํ•œ ๋ฒˆํ˜ธ๋ผ๋ฆฌ ์Šคํƒ€๋ฅผ

www.acmicpc.net



๐Ÿ”ธ ๋ฌธ์ œ ๋ถ„์„ ๐Ÿ”ธ

  • n๋ช…์˜ ์ฐธ๊ฐ€์ž ์ค‘์— ๋‘ ์‚ฌ๋žŒ์˜ ๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค.
    • 2๋ช…์”ฉ ๊ฒฝ๊ธฐ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉฐ ์ด๊ธฐ๋ฉด ์˜ฌ๋ผ๊ฐ„๋‹ค.
    • n์ด ํ™€์ˆ˜์—ฌ์„œ ํ˜ผ์ž ๋‚จ๋Š” ๋งˆ์ง€๋ง‰ ์„ ์ˆ˜๋Š” ๋ถ€์ „์Šน์œผ๋กœ ์˜ฌ๋ผ๊ฐ„๋‹ค.
    • ์ฐธ๊ฐ€์ž ์ˆ˜ n์ด 1์ด ๋ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•œ๋‹ค.
  • ๋‘ ์‚ฌ๋žŒ์€ ๋ฌด์กฐ๊ฑด ์Šน๋ฆฌํ•œ๋‹ค.
  • ๋‘ ์‚ฌ๋žŒ์ด ๋งŒ๋‚˜๋Š” ๋ผ์šด๋“œ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.
    • ๋งŒ๋‚˜์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ๋Š” -1์„ ์ถœ๋ ฅํ•˜์ง€๋งŒ, ๊ทธ๋Ÿฐ ๊ฒฝ์šฐ๋Š” ์—†๋‹ค.

๐Ÿ”ธ ์ฝ”๋“œ ๐Ÿ”ธ

import java.util.ArrayList;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int a = sc.nextInt();
        int b = sc.nextInt();
        int round = 0;

        ArrayList<Integer> arr = new ArrayList<>();
        for (int i = 1; i <= n; i++) {
            if (i == a || i == b)
                arr.add(1);
            else
                arr.add(0);
        }

        while (n > 1) {
            round++;
            boolean flag = false;
            ArrayList<Integer> temp = new ArrayList<>();

            for (int i = 0; i < n/2; i++) {
                if (arr.get(i*2) == 1 && arr.get(i*2+1) == 1) {
                    flag = true;
                    break;
                }
                else if (arr.get(i*2) == 1 || arr.get(i*2+1) == 1)
                    temp.add(1);
                else
                    temp.add(0);
            }
            if (flag)
                break;

            if (n % 2 != 0) {
                temp.add(arr.get(n-1));
                n /= 2;
                n++;
            }
            else
                n /= 2;

            arr = temp;
        }
        System.out.println(round);
    }
}

๐Ÿ”ธ ์ฝ”๋“œ ํ•ด์„ ๐Ÿ”ธ

  • ArrayList์— ๋‘ ์‚ฌ๋žŒ์˜ ๋ฒˆํ˜ธ ์ธ๋ฑ์Šค๋Š” 1์„ ์ €์žฅํ•˜๊ณ , ๋‚˜๋จธ์ง€๋Š” 0์„ ์ €์žฅํ•œ๋‹ค.
    • n์ด 1์ด ๋  ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•˜์ง€๋งŒ n์€ ์ตœ์†Œ 2๊ฐ€ ๋œ๋‹ค.
  • ์ž„์‹œ ArrayList์ธ temp์— ๋‹ค์Œ ์ฐธ๊ฐ€์ž ๋ชฉ๋ก์„ n/2๊ฐœ ์ €์žฅํ•œ๋‹ค.
    • ๋‘ ์ธ๋ฑ์Šค๊ฐ€ ๋ชจ๋‘ 1์ด๋ฉด ๋ฐ˜๋ณต์„ ์ข…๋ฃŒํ•˜๊ณ  round๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.
    • ํ•œ ์ธ๋ฑ์Šค๋ผ๋„ 1์ด๋ฉด temp ์— 1์„ ์ €์žฅํ•œ๋‹ค.
    • ๋‘ ์ธ๋ฑ์Šค๊ฐ€ ๋ชจ๋‘ 0์ด๋ฉด temp์— 0์„ ์ €์žฅํ•œ๋‹ค.
  • ํ˜„์žฌ ์ฐธ๊ฐ€์ž์ˆ˜ n์ด ํ™€์ˆ˜์˜€๋‹ค๋ฉด ๋งˆ์ง€๋ง‰ ๋ถ€์ „์Šน ์ฐธ๊ฐ€์ž๋ฅผ temp์— ์ €์žฅํ•œ๋‹ค.
    • ํ™€์ˆ˜ ์ง์ˆ˜๋ฅผ ์ƒ๊ฐํ•ด ๋‹ค์Œ ์ฐธ๊ฐ€์ž ์ˆ˜ n์„ ๋ณ€๊ฒฝํ•œ๋‹ค.
  • arr๋ฅผ temp๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค.

๐Ÿ”ธ end ๐Ÿ”ธ

  • ์ฒ˜์Œ์—” ArrayList์˜ remove๋ฅผ ์‚ฌ์šฉํ•ด ๋ณต์‚ฌ๊ฐ€ ํ•„์š” ์—†์„๊ฒƒ์œผ๋กœ ์ƒ๊ฐํ–ˆ์ง€๋งŒ, ์ธ๋ฑ์Šค๊ฐ€ ๋ฐ”๋€Œ๋Š”๊ฒŒ ์ถ”์ ์ด ๋ณต์žกํ•ด์งˆ ๊ฒƒ ๊ฐ™์•„ arr = temp; ํ˜•์‹์œผ๋กœ ํ’€์ดํ–ˆ๋‹ค.
    • ๋‹คํ–‰ํžˆ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚˜์ง€ ์•Š์•˜๋‹ค.
    • n์ด 10๋งŒ์œผ๋กœ ๋น„๊ต์  ์—ฌ์œ ๋กœ์šด ๋ฒ”์œ„์–ด์„œ ๊ฐ€๋Šฅํ–ˆ๋˜ ๊ฒƒ ๊ฐ™๋‹ค.

728x90

'CodingTest > Java' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

BOJ_1072 : ๊ฒŒ์ž„  (0) 2023.01.04
BOJ_1063 : ํ‚น  (0) 2023.01.04
BOJ_1004 : ์–ด๋ฆฐ ์™•์ž  (0) 2022.12.31
BOJ_1205 : ๋“ฑ์ˆ˜ ๊ตฌํ•˜๊ธฐ  (0) 2022.12.30
BOJ_11656 : ์ ‘๋ฏธ์‚ฌ ๋ฐฐ์—ด  (0) 2022.12.30