์•Œ๊ณ ๋ฆฌ์ฆ˜/๋ฐฑ์ค€

[ ๋ฐฑ์ค€ / BOJ 20055 ] ์ปจ๋ฒ ์ด์–ด ๋ฒจํŠธ ์œ„์˜ ๋กœ๋ด‡

KIMHYEYUN 2021. 9. 30. 01:08
๋ฐ˜์‘ํ˜•

https://www.acmicpc.net/problem/20055

 

20055๋ฒˆ: ์ปจ๋ฒ ์ด์–ด ๋ฒจํŠธ ์œ„์˜ ๋กœ๋ด‡

๊ธธ์ด๊ฐ€ N์ธ ์ปจ๋ฒ ์ด์–ด ๋ฒจํŠธ๊ฐ€ ์žˆ๊ณ , ๊ธธ์ด๊ฐ€ 2N์ธ ๋ฒจํŠธ๊ฐ€ ์ด ์ปจ๋ฒ ์ด์–ด ๋ฒจํŠธ๋ฅผ ์œ„์•„๋ž˜๋กœ ๊ฐ์‹ธ๋ฉฐ ๋Œ๊ณ  ์žˆ๋‹ค. ๋ฒจํŠธ๋Š” ๊ธธ์ด 1 ๊ฐ„๊ฒฉ์œผ๋กœ 2N๊ฐœ์˜ ์นธ์œผ๋กœ ๋‚˜๋‰˜์–ด์ ธ ์žˆ์œผ๋ฉฐ, ๊ฐ ์นธ์—๋Š” ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด 1๋ถ€

www.acmicpc.net

๋ฌธ์ œ


๊ฐ€ N์ธ ์ปจ๋ฒ ์ด์–ด ๋ฒจํŠธ๊ฐ€ ์žˆ๊ณ , ๊ธธ์ด๊ฐ€ 2N์ธ ๋ฒจํŠธ๊ฐ€ ์ด ์ปจ๋ฒ ์ด์–ด ๋ฒจํŠธ๋ฅผ ์œ„์•„๋ž˜๋กœ ๊ฐ์‹ธ๋ฉฐ ๋Œ๊ณ  ์žˆ๋‹ค. ๋ฒจํŠธ๋Š” ๊ธธ์ด 1 ๊ฐ„๊ฒฉ์œผ๋กœ 2N๊ฐœ์˜ ์นธ์œผ๋กœ ๋‚˜๋‰˜์–ด์ ธ ์žˆ์œผ๋ฉฐ, ๊ฐ ์นธ์—๋Š” ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด 1๋ถ€ํ„ฐ 2N๊นŒ์ง€์˜ ๋ฒˆํ˜ธ๊ฐ€ ๋งค๊ฒจ์ ธ ์žˆ๋‹ค.

๋ฒจํŠธ๊ฐ€ ํ•œ ์นธ ํšŒ์ „ํ•˜๋ฉด 1๋ฒˆ๋ถ€ํ„ฐ 2N-1๋ฒˆ๊นŒ์ง€์˜ ์นธ์€ ๋‹ค์Œ ๋ฒˆํ˜ธ์˜ ์นธ์ด ์žˆ๋Š” ์œ„์น˜๋กœ ์ด๋™ํ•˜๊ณ , 2N๋ฒˆ ์นธ์€ 1๋ฒˆ ์นธ์˜ ์œ„์น˜๋กœ ์ด๋™ํ•œ๋‹ค. i๋ฒˆ ์นธ์˜ ๋‚ด๊ตฌ๋„๋Š” Ai์ด๋‹ค. ์œ„์˜ ๊ทธ๋ฆผ์—์„œ 1๋ฒˆ ์นธ์ด ์žˆ๋Š” ์œ„์น˜๋ฅผ "์˜ฌ๋ฆฌ๋Š” ์œ„์น˜", N๋ฒˆ ์นธ์ด ์žˆ๋Š” ์œ„์น˜๋ฅผ "๋‚ด๋ฆฌ๋Š” ์œ„์น˜"๋ผ๊ณ  ํ•œ๋‹ค.

์ปจ๋ฒ ์ด์–ด ๋ฒจํŠธ์— ๋ฐ•์Šค ๋ชจ์–‘ ๋กœ๋ด‡์„ ํ•˜๋‚˜์”ฉ ์˜ฌ๋ฆฌ๋ ค๊ณ  ํ•œ๋‹ค. ๋กœ๋ด‡์€ ์˜ฌ๋ฆฌ๋Š” ์œ„์น˜์—๋งŒ ์˜ฌ๋ฆด ์ˆ˜ ์žˆ๋‹ค. ์–ธ์ œ๋“ ์ง€ ๋กœ๋ด‡์ด ๋‚ด๋ฆฌ๋Š” ์œ„์น˜์— ๋„๋‹ฌํ•˜๋ฉด ๊ทธ ์ฆ‰์‹œ ๋‚ด๋ฆฐ๋‹ค. ๋กœ๋ด‡์€ ์ปจ๋ฒ ์ด์–ด ๋ฒจํŠธ ์œ„์—์„œ ์Šค์Šค๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋กœ๋ด‡์„ ์˜ฌ๋ฆฌ๋Š” ์œ„์น˜์— ์˜ฌ๋ฆฌ๊ฑฐ๋‚˜ ๋กœ๋ด‡์ด ์–ด๋–ค ์นธ์œผ๋กœ ์ด๋™ํ•˜๋ฉด ๊ทธ ์นธ์˜ ๋‚ด๊ตฌ๋„๋Š” ์ฆ‰์‹œ 1๋งŒํผ ๊ฐ์†Œํ•œ๋‹ค.

์ปจ๋ฒ ์ด์–ด ๋ฒจํŠธ๋ฅผ ์ด์šฉํ•ด ๋กœ๋ด‡๋“ค์„ ๊ฑด๋„ˆํŽธ์œผ๋กœ ์˜ฎ๊ธฐ๋ ค๊ณ  ํ•œ๋‹ค. ๋กœ๋ด‡์„ ์˜ฎ๊ธฐ๋Š” ๊ณผ์ •์—์„œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ์ผ์ด ์ˆœ์„œ๋Œ€๋กœ ์ผ์–ด๋‚œ๋‹ค.

  1. ๋ฒจํŠธ๊ฐ€ ๊ฐ ์นธ ์œ„์— ์žˆ๋Š” ๋กœ๋ด‡๊ณผ ํ•จ๊ป˜ ํ•œ ์นธ ํšŒ์ „ํ•œ๋‹ค.
  2. ๊ฐ€์žฅ ๋จผ์ € ๋ฒจํŠธ์— ์˜ฌ๋ผ๊ฐ„ ๋กœ๋ด‡๋ถ€ํ„ฐ, ๋ฒจํŠธ๊ฐ€ ํšŒ์ „ํ•˜๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ํ•œ ์นธ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ด๋™ํ•œ๋‹ค. ๋งŒ์•ฝ ์ด๋™ํ•  ์ˆ˜ ์—†๋‹ค๋ฉด ๊ฐ€๋งŒํžˆ ์žˆ๋Š”๋‹ค.
    1. ๋กœ๋ด‡์ด ์ด๋™ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ด๋™ํ•˜๋ ค๋Š” ์นธ์— ๋กœ๋ด‡์ด ์—†์œผ๋ฉฐ, ๊ทธ ์นธ์˜ ๋‚ด๊ตฌ๋„๊ฐ€ 1 ์ด์ƒ ๋‚จ์•„ ์žˆ์–ด์•ผ ํ•œ๋‹ค.
  3. ์˜ฌ๋ฆฌ๋Š” ์œ„์น˜์— ์žˆ๋Š” ์นธ์˜ ๋‚ด๊ตฌ๋„๊ฐ€ 0์ด ์•„๋‹ˆ๋ฉด ์˜ฌ๋ฆฌ๋Š” ์œ„์น˜์— ๋กœ๋ด‡์„ ์˜ฌ๋ฆฐ๋‹ค.
  4. ๋‚ด๊ตฌ๋„๊ฐ€ 0์ธ ์นธ์˜ ๊ฐœ์ˆ˜๊ฐ€ K๊ฐœ ์ด์ƒ์ด๋ผ๋ฉด ๊ณผ์ •์„ ์ข…๋ฃŒํ•œ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด 1๋ฒˆ์œผ๋กœ ๋Œ์•„๊ฐ„๋‹ค.

์ข…๋ฃŒ๋˜์—ˆ์„ ๋•Œ ๋ช‡ ๋ฒˆ์งธ ๋‹จ๊ณ„๊ฐ€ ์ง„ํ–‰ ์ค‘์ด์—ˆ๋Š”์ง€ ๊ตฌํ•ด๋ณด์ž. ๊ฐ€์žฅ ์ฒ˜์Œ ์ˆ˜ํ–‰๋˜๋Š” ๋‹จ๊ณ„๋Š” 1๋ฒˆ์งธ ๋‹จ๊ณ„์ด๋‹ค.

์ž…๋ ฅ


์ฒซ์งธ ์ค„์— N, K๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„์—๋Š” A1, A2, ..., A2N์ด ์ฃผ์–ด์ง„๋‹ค.

 

์ถœ๋ ฅ


๋ช‡ ๋ฒˆ์งธ ๋‹จ๊ณ„๊ฐ€ ์ง„ํ–‰ ์ค‘์ผ๋•Œ ์ข…๋ฃŒ๋˜์—ˆ๋Š”์ง€ ์ถœ๋ ฅํ•œ๋‹ค.

 

ํ’€์ด


while ๋ฌธ์œผ๋กœ ํ•œ ํ„ด์”ฉ ์ง„ํ–‰ํ–ˆ๋‹ค. 

1๏ธโƒฃ ์ปจ๋ฒ ์ด์–ด ๋ฒจํŠธ ์ด๋™ ๐Ÿ‘‰ 2๏ธโƒฃ ๋กœ๋ด‡ ์ด๋™ ๐Ÿ‘‰ 3๏ธโƒฃ ๋‚ด๊ตฌ๋„๊ฐ€ 0์ธ ๋ฒจํŠธ๊ฐ€ K๊ฐœ ์ด์ƒ์ธ์ง€ ํ™•์ธ ์œผ๋กœ ํ•œ ํ„ด ์ง„ํ–‰โ€ผ๏ธ

 

1๏ธโƒฃ ์ปจ๋ฒ ์ด์–ด ๋ฒจํŠธ ์ด๋™ beltMove()

  • ๊ฐ ๋ฒจํŠธ์˜ ๋‚ด๊ตฌ๋„๋ฅผ ๋‹ค์Œ ์œ„์น˜๋กœ ์˜ฎ๊ธฐ๊ธฐ
  • ๋กœ๋ด‡ ์ด๋™ ๐Ÿ‘‰ N ์œ„์น˜์—์„œ ๋กœ๋ด‡์ด ๋‚ด๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์— 0 ์œ„์น˜์—๋Š” ๋กœ๋ด‡ ์กด์žฌ โŒ

2๏ธโƒฃ ๋กœ๋ด‡ ์ด๋™ robotMove()

  • i ์œ„์น˜์— ๋กœ๋ด‡์ด ์กด์žฌํ•˜๊ณ , i+1 ์œ„์น˜์— ๋กœ๋ด‡์ด ์กด์žฌํ•˜์ง€ ์•Š๊ณ , i+1 ์œ„์น˜์˜ ๋‚ด๊ตฌ๋„๊ฐ€ 1 ์ด์ƒ์ด๋ฉด ๐Ÿ‘‰ i ์œ„์น˜์˜ ๋กœ๋ด‡์„ i+1 ์œ„์น˜๋กœ ์ด๋™
  • i+1 ์œ„์น˜์˜ ๋‚ด๊ตฌ๋„ -1
  • ์˜ฌ๋ผ๊ฐ€๋Š” ์œ„์น˜(0)์˜ ๋‚ด๊ตฌ๋„๊ฐ€ 1 ์ด์ƒ์ด๊ณ , ๋กœ๋ด‡์ด ์—†๋‹ค๋ฉด ๋กœ๋ด‡์„ ์˜ฌ๋ ค์ฃผ๊ณ  ๋‚ด๊ตฌ๋„ -1

3๏ธโƒฃ ๋‚ด๊ตฌ๋„๊ฐ€ 0์ธ ๋ฒจํŠธ๊ฐ€ K๊ฐœ ์ด์ƒ์ธ์ง€ ํ™•์ธ isEnd()

  • 0 ~ 2๏นกN - 1 ์˜ ์ปจ๋ฒ ์ด์–ด ๋ฒจํŠธ์˜ ๋‚ด๊ตฌ๋„ ํ™•์ธ 

 

์ฝ”๋“œ


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main_BOJ_20055_์ปจ๋ฒ ์ด์–ด๋ฒจํŠธ์œ„์˜๋กœ๋ด‡ {
    static int N, K;
    static int[] belt;
    static boolean[] robot;
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer stringTokenizer = new StringTokenizer(br.readLine());

        N = Integer.parseInt(stringTokenizer.nextToken());
        K = Integer.parseInt(stringTokenizer.nextToken());

        belt = new int[2*N];
        robot = new boolean[N];
        // ๋กœ๋ด‡์€ N+1์นธ์—์„œ ๋‚ด๋ฆฌ๊ธฐ๋•Œ๋ฌธ์— N๊ฐœ!

        stringTokenizer = new StringTokenizer(br.readLine());
        for(int i = 0 ; i < 2*N ;i++){
            belt[i] = Integer.parseInt(stringTokenizer.nextToken());
        }
        
        int turn = 0;
        while(true){
            turn++;

            beltMove();
            robotMove();
            
            if(isEnd())
                break;          
        }

        System.out.println(turn);
    }

    private static boolean isEnd() {
        int cnt = 0;
        for(int i = 0 ; i < 2*N ; i++){
            if(belt[i] == 0)
                cnt++;
            
            if(cnt >= K)
                return true;
        }
        return false;
    }
    private static void robotMove() {
        // ๋กœ๋ด‡ ๋‚ด๋ฆฌ๊ธฐ
        if(robot[N-1])
            robot[N-1] = false;

        // ๋กœ๋ด‡ ์ด๋™
        for(int i = N-2 ; i >= 0 ; i--){
            if(!robot[i+1] && robot[i] && belt[i+1] > 0){
                robot[i] = false;
                robot[i+1] = true;
                belt[i+1]--;
            }
        }

        // ์˜ฌ๋ผ๊ฐ€๋Š” ์œ„์น˜์— ๋กœ๋ด‡์ด ์—†๊ณ , ๋‚ด๊ตฌ๋„๊ฐ€ 1์ด์ƒ์ด๋ฉด ์˜ฌ๋ฆฌ๊ธฐ
        if(!robot[0] && belt[0] >= 1){
            robot[0] = true;
            belt[0]--;
        }
    }

    private static void beltMove() {
        // ์ปจ๋ฒ ์ด๋„ˆ ๋ฒจํŠธ ์ด๋™
        int tmp = belt[2*N-1];

        for(int i = 2*N-1 ; i > 0 ; i--){
            belt[i] = belt[i-1];
        }
        belt[0] = tmp;

        // ๋กœ๋ด‡์ด๋™
        for(int i = N-1 ; i > 0; i--){
            robot[i] = robot[i-1];
        }
        // N์—์„œ ๋กœ๋ด‡์ด ๋‚ด๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์— ์ด๋™ ํ›„์—๋Š” 0์— ๋กœ๋ด‡์ด ์—†์Œ
        robot[0] = false;
    }
}

 

728x90
๋ฐ˜์‘ํ˜•