๐Ÿ“ ์•Œ๊ณ ๋ฆฌ์ฆ˜/Simulation

[๋ฐฑ์ค€] 20055๋ฒˆ: ์ปจ๋ฒ ์ด์–ด ๋ฒจํŠธ ์œ„์˜ ๋กœ๋ด‡( Java )

์ ์ด 2022. 4. 14. 23:53
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ (Gold 5)

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

 

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

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

www.acmicpc.net


ํ’€์ด

๋ฌธ์ œ๊ฐ€ ์ฐธ,, ์—ฌ๋Ÿฌ๋ชจ๋กœ ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ค์› ๋‹ค,,

๋‹ค๋ฅธ๊ฒƒ๋ณด๋‹ค ๊ฐ‘์ž๊ธฐ ์ถœ๋ ฅํ•˜๋ผ๊ณ  ๋‚˜์˜จ ๋‹จ์–ด์ธ '๋‹จ๊ณ„'๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์˜ˆ์ œ๋ฅผ ๋ช‡๊ฐœ ๋Œ๋ ค๋ณด๊ณ ์•ผ ์•Œ์•˜๋˜ ๊ฒƒ ๊ฐ™๋‹ค.

์—ฌ๊ธฐ์„  1-4์˜ ๋ฃจํ‹ด์„ ํ•œ ๋‹จ๊ณ„๋ผ๊ณ  ํ•˜๊ณ , ์ข…๋ฃŒ๋˜๊ธฐ๊นŒ์ง€ ์ด ๋ช‡๋ฒˆ์˜ ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์ณค๋Š”์ง€๋ฅผ ๊ตฌํ•˜๋ฉด ๋œ๋‹ค.

์ฒ˜์Œ์—” ์ผ์˜ ์ˆœ์„œ๋กœ ๋‚˜์™€์žˆ๋Š” 1,2,3,4๊ฐ€ ํ•œ ๋‹จ๊ณ„๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ค„ ์•Œ์•˜๊ณ ,

์˜ˆ์ œ1์˜ ์ถœ๋ ฅ์ด '2'๋ฒˆ ๋‹จ๊ณ„, ์ฆ‰ '๊ฐ€์žฅ ๋จผ์ € ๋ฒจํŠธ์— ์˜ฌ๋ผ๊ฐ„ ~' ๋ผ๋Š” ์ค„ ์•Œ์•˜๋‹ค. ๋ฌธ์ œ์— ๋ชจํ˜ธํ•œ ์ ์ด ๋„ˆ๋ฌด ๋งŽ๋‹ค ๐Ÿ’ฆ

๋ฌธ์ œ ์ž์ฒด๊ฐ€ ํ—ท๊ฐˆ๋ ธ๋˜ ๊ฒƒ ์™ธ์—๋Š” ๋ณดํ†ต์˜ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ๋ฌธ์ œ์ฒ˜๋Ÿผ ํ•˜๋‚˜์”ฉ ๊ตฌํ˜„๋งŒ ํ•˜๋ฉด ๋œ๋‹ค.

์ˆœ์„œ

  • Belt๋ผ๋Š” ๋‚ด๊ตฌ๋„์™€ ๋กœ๋ด‡์˜ ์—ฌ๋ถ€๋ฅผ ์ €์žฅํ•˜๋Š” ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค.
    โ— ๋กœ๋ด‡์€ ๋ฌด์กฐ๊ฑด ํ•œ ์นธ์— ํ•˜๋‚˜๋งŒ ์˜ฌ๋ผ๊ฐˆ ์ˆ˜ ๋ฐ–์— ์—†๋‹ค. ๋”ฐ๋ผ์„œ boolean ํƒ€์ž… ์„ ์–ธ!
  • [1๋ฒˆ ์ˆœ์„œ] ์ปจ๋ฒ ์ด์–ด๋ฅผ ๋ฐฐ์—ด๋กœ ๋งŒ๋“ค์–ด ๋ฒจํŠธ์˜ ํšŒ์ „์€ ๋ฐฐ์—ด์˜ ํšŒ์ „์œผ๋กœ ๊ตฌํ˜„ํ•˜์˜€๋‹ค.
    โ— i = 0 ๋ถ€ํ„ฐ i+1์— ๊ฐ’์„ ๋ณต์‚ฌํ•˜๋Š” ๋ฐฉ์‹์ด๋ฉด, ๊ฐ’์ด ๋ฐ˜๋ณต๋˜์–ด ๋ณต์‚ฌ๋œ๋‹ค. ์ฆ‰, conv[0]์˜ ๊ฐ’์œผ๋กœ ๋ชจ๋“  ๋ฐฐ์—ด์ด ๋„๋ฐฐ๋œ๋‹ค!
      ๋”ฐ๋ผ์„œ, 2*N-1๋ถ€ํ„ฐ i๋ฅผ ์ค„์—ฌ๋‚˜๊ฐ€๋ฉฐ ๊ฐ’์„ ๋ณต์‚ฌํ•˜์ž!
  • [1๋ฒˆ ์ˆœ์„œ] ๋ฒจํŠธ ํšŒ์ „ ํ›„, N-1์ธ๋ฑ์Šค์˜ robot์€ ๋ฌด์กฐ๊ฑด false๋กœ ๋ฐ”๊พธ์ž. ( ๋‚ด๋ ค๊ฐ€๋Š” ๊ณณ )
  • [2๋ฒˆ ์ˆœ์„œ] ๊ฐ€์žฅ ๋จผ์ € ๋ฒจํŠธ์— ์˜ฌ๋ผ๊ฐ„ ๋กœ๋ด‡ -> i-1๋ถ€ํ„ฐ 0๋ฒˆ๊นŒ์ง€์˜ ์ปจ๋ฒ ์ด์–ด ๋ฐฐ์—ด ํƒ์ƒ‰
    โ— '๊ฐ€์žฅ ๋จผ์ € ์˜ฌ๋ผ๊ฐ„'์— ์†์•„ ๋”ฐ๋กœ ์ˆœ์„œ๋ฅผ ๊ธฐ์–ตํ•˜์ง€ ๋ง์ž!
       ์–ด์ฐจํ”ผ N ~ 2N-1๊นŒ์ง€๋Š” ๋กœ๋ด‡์ด ๋ฌด์กฐ๊ฑด ์—†๊ณ , ๊ฒฐ๊ตญ์—” ๋งจ ์˜ค๋ฅธ์ชฝ (N-1๊ณผ ๊ฐ€๊นŒ์šด์ชฝ)์— ์žˆ๋Š” ์• ๊ฐ€ ์ œ์ผ ์˜ค๋ž˜๋œ ์• ๋‹ค!
  • [2๋ฒˆ ์ˆœ์„œ] ์ปจ๋ฒ ์ด์–ด ๋ฒจํŠธ ํšŒ์ „๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋กœ๋ด‡์„ ์ด๋™์‹œํ‚ค๊ณ  N-1์ธ๋ฑ์Šค์˜ robot์€ ๋ฌด์กฐ๊ฑด false๋กœ! 

๋ฌธ์ œ ์ดํ•ด๋„ ํž˜๋“ค๊ณ , ๊นŒ๋‹ค๋กœ์šด ์กฐ๊ฑด์ด ๋„ˆ๋ฌด ๋งŽ์•˜๋˜ ์ง€์ €๋ถ„ํ•œ,,๋ฌธ์ œ,,๐Ÿ’ฆ

 

์ฝ”๋“œ

๋”๋ณด๊ธฐ
package simulation;

import java.util.*;
import java.io.*;

public class BOJ_20055_์ปจ๋ฒ ์ด์–ด๋ฒจํŠธ์œ„์˜๋กœ๋ด‡ {
    static class Belt{
        int power;
        boolean robot;
        public Belt(int power) {
            this.power = power;
            this.robot = false;
        }
    }
    static int N, K;
    static Belt[] conv;
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        N = Integer.parseInt(st.nextToken());
        K = Integer.parseInt(st.nextToken());
        conv = new Belt[2*N];
        st = new StringTokenizer(br.readLine());
        for(int i =0 ; i < 2*N ; i++){
            conv[i] = new Belt(Integer.parseInt(st.nextToken()));
        }

        int stage = 1;
        while(true){
            // 1. ํšŒ์ „
            int p = conv[2*N-1].power;
            boolean r = conv[2*N-1].robot;
            for(int i = 2*N-1 ; i > 0 ; i--){
                conv[i].power = conv[i-1].power;
                conv[i].robot = conv[i-1].robot;
            }
            conv[0].power = p;
            conv[0].robot = r;
            conv[N-1].robot = false;

            // 2. ๊ฐ€์žฅ ๋จผ์ € ์˜ฌ๋ผ๊ฐ„ ๋กœ๋ด‡๋ถ€ํ„ฐ, ์ด๋™
            for(int i = N-1 ; i > 0 ; i--){
                if(!conv[i].robot && conv[i-1].robot && conv[i].power >= 1){
                    conv[i].power --;
                    conv[i].robot = true;
                    conv[i-1].robot = false;
                }
            }
            conv[0].robot = false;
            conv[N-1].robot = false;

            // 3. ์˜ฌ๋ฆฌ๋Š” ์œ„์น˜์— ๋กœ๋ด‡ ์˜ฌ๋ฆผ
            if(conv[0].power != 0){
                conv[0].robot = true;
                conv[0].power --;
            }
            if(!isValid()) break;
            stage++;
        }
        System.out.println(stage);
    }

    private static boolean isValid() {
        int cnt = 0;
        for(int i = 0 ; i < 2*N ; i++){
            if(conv[i].power <= 0) cnt++;
        }
        return cnt < K;
    }
}

์ œ์ถœ

ํŠน๋ณ„ํ•œ ๋ฐ˜๋ก€ ์—†์ด ๋ฌธ์ œ๋งŒ ์ž˜ ์ดํ•ดํ•˜๊ณ  ์˜ˆ์ œ๋งŒ ๋‹ค ๋งž์•˜๋‹ค๋ฉด ํ†ต๊ณผ ๊ฐ€๋ˆ™

๋ฐ˜์‘ํ˜•