๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

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

[๋ฐฑ์ค€ ์Šคํ„ฐ๋”” 10์ฃผ์ฐจ] 20055๋ฒˆ ์ปจ๋ฒ ์ด์–ด ๋ฒจํŠธ ์œ„์˜ ๋กœ๋ด‡ ์‹ค๋ฒ„3 - ์ž๋ฐ”(JAVA) / ๊ตฌํ˜„/ ์‹œ๋ฎฌ๋ ˆ์ด์…˜

๐Ÿ“‘ ๋ฌธ์ œ

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์ด ์ฃผ์–ด์ง„๋‹ค.

์ถœ๋ ฅ

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

 

 

 

 

 

 

 

 

โœ’๏ธ ํ’€์ด

 ์ด ๋ฌธ์ œ๋Š” ์‚ฌ์‹ค....ํ’€๊ธด ํ–ˆ๋Š”๋ฐ, ๋‚ด๊ฐ€ ๊ณผ์—ฐ ์ตœ์ ์œผ๋กœ ํ’€์—ˆ๋Š”์ง€ ์ž์‹ ์ด ์—†๋‹ค. 

 ์‹ค๋ฒ„3์— ํ๋ฅผ ์จ๋„ ๋˜๋‚˜? (ใ…‹ใ…‹) ์‹ฌ์ง€์–ด contains๋ผ๋Š” ๋‚ด์žฅํ•จ์ˆ˜๋„ ์ผ๋Š”๋ฐ ๊ทธ๋ž˜๋„ ๋˜๋‚˜? ๋” ์‰ฌ์šด ๋ฐฉ๋ฒ•์ด ์žˆ์„๊นŒ? ์‹ถ์—ˆ๋Š”๋ฐ ๊ท€์ฐฎ์•„์„œ ๊ทธ๋ƒฅ ๋‚ด์žฅํ•จ์ˆ˜ ์“ฐ๊ณ  ํŽธํ•˜๊ฒŒ.....ํ’€์—ˆ๋‹ค. 

 

 ๐Ÿ’ก ๋ฒจํŠธ์˜ ํšŒ์ „์€ ์ปจํ…Œ์ด๋„ˆ์˜ ๋งจ ์™ผ์ชฝ(left)์™€ ๋งจ ์˜ค๋ฅธ์ชฝ(right)์„ ๊ฐ€๋ฅดํ‚ค๋Š” ์ธ๋ฑ์Šค๋ฅผ ์ค„์ด๋Š” ๊ฒƒ์œผ๋กœ ๊ตฌํ˜„ํ•œ๋‹ค. ๋ฒจํŠธ๊ฐ€ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ํšŒ์ „ํ•˜๋ฏ€๋กœ, ํ•œ ์นธ ํšŒ์ „ํ•  ๋•Œ๋งˆ๋‹ค ๋ฐ”๋กœ ์ด์ „ ์นธ์ด ํ˜„์žฌ ์นธ์œผ๋กœ ์˜ค๊ฒŒ ๋œ๋‹ค. ๋”ฐ๋ผ์„œ ๋งจ ์™ผ์ชฝ/์˜ค๋ฅธ์ชฝ์„ ๊ฐ€๋ฅดํ‚ค๋Š” ๋ณ€์ˆ˜์—๋Š” ํ˜„์žฌ ์ปจํ…Œ์ด๋„ˆ ์ธ๋ฑ์Šค๋ณด๋‹ค ํ•œ ์นธ ์ด์ „์˜ ์ธ๋ฑ์Šค๊ฐ€ ๋“ค์–ด์˜ค๊ฒŒ ๋œ๋‹ค.

 ๐Ÿ’ก ๊ธธ์ด 2N์˜ ๋ฒจํŠธ๋Š” 0~2N-1์˜ ์ธ๋ฑ์Šค๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค. ์—ฌ๊ธฐ์„œ ๋งจ ์™ผ์ชฝ๊ณผ ๋งจ ์˜ค๋ฅธ์ชฝ์„ ๊ฐ€๋ฅดํ‚ค๋Š” ์ธ๋ฑ์Šค ๋ณ€์ˆ˜์˜ ๊ฐ„๊ฒฉ์€ ์ปจํ…Œ์ด๋„ˆ ๋ฒจํŠธ์˜ ์ ˆ๋ฐ˜ ๊ธธ์ด์ธ N์œผ๋กœ ์œ ์ง€๋œ๋‹ค.

 ๐Ÿ’ก ๋งจ ์˜ค๋ฅธ์ชฝ์— ๋„๋‹ฌํ•˜๋ฉด ๋กœ๋ด‡์€ ํ•„์ˆ˜์ ์œผ๋กœ ๋‚ด๋ ค์˜ค๊ฒŒ ๋˜๋ฏ€๋กœ, ์ปจํ…Œ์ด๋„ˆ์— ์˜ฌ๋ผ๊ฐ„ ๋กœ๋ด‡์˜ ์ด ๊ฐœ์ˆ˜๋Š” ๋งจ ์œ—์ค„์˜ ๊ธธ์ด N์„ ๋„˜์ง€ ๋ชปํ•œ๋‹ค.

 

 ๋‚˜๋จธ์ง€๋Š” ์œ„ ์‚ฌํ•ญ๋งŒ ์ž˜ ์ง€์ผœ์„œ ๋‹จ๊ณ„์ ์œผ๋กœ ์ฝ”๋”ฉํ•˜๋ฉด ๋œ๋‹ค. 

 โœ”๏ธ <๋‹จ๊ณ„๋ฅผ ์ง„ํ–‰ํ•œ๋‹ค>

 โœ”๏ธ ๋ฒจํŠธ๋ฅผ ํšŒ์ „์‹œํ‚จ๋‹ค.

 โœ”๏ธ ์˜ฌ๋ ค์ ธ์žˆ๋Š” ๋กœ๋ด‡๋“ค์˜ ์œ„์น˜๋ฅผ ํ•˜๋‚˜์”ฉ ์ฒดํฌํ•œ๋‹ค. ๋งจ ์˜ค๋ฅธ์ชฝ ๋กœ๋ด‡์€ ๋‚ด๋ฆฌ๊ณ , ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ๋กœ๋ด‡์€ ์ด๋™์‹œํ‚จ๋‹ค.

 โœ”๏ธ ๋งจ ์™ผ์ชฝ ์นธ์„ ํ™•์ธํ•˜์—ฌ ๋กœ๋ด‡์„ ์˜ฌ๋ฆด ์ˆ˜ ์žˆ์œผ๋ฉด ์˜ฌ๋ฆฐ๋‹ค.

 โœ”๏ธ ๋กœ๋ด‡์— ๋Œ€ํ•œ ๋‹จ๊ณ„ ์ค‘, ๋‚ด๊ตฌ๋„๊ฐ€ 0์ธ ์นธ์ด ์ƒ๊ธฐ๋Š”์ง€ ๊ณ„์†ํ•ด์„œ ์ฒดํฌํ•ด์„œ ๊ฐœ์ˆ˜๋ฅผ ์นด์šดํŠธํ•œ๋‹ค.

 โœ”๏ธ <๋‚ด๊ตฌ๋„๊ฐ€ 0์ธ ์นธ์ด K๊ฐœ๊ฐ€ ๋„˜์œผ๋ฉด ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ข…๋ฃŒํ•œ๋‹ค>

 

 

 

 

 

 

 

 

 

 

๐Ÿ’ป ์†Œ์Šค์ฝ”๋“œ: ์ž๋ฐ”(Java)

public class Main_๋ฐฑ์ค€_20055_์ปจํ…Œ์ด๋„ˆ๋ฒจํŠธ์œ„์˜๋กœ๋ด‡_์‹ค๋ฒ„I {
	
	static int N, K, left, right;
	static int[] belt, robot;
	static Queue<Integer> queue;
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		N = Integer.parseInt(st.nextToken());
		K = Integer.parseInt(st.nextToken());
		belt = new int[2*N];	// ๊ฐ ์นธ์˜ ๋‚ด๊ตฌ๋„ ์ €์žฅ
		robot = new int[N];	// ๋กœ๋ด‡์ด ์œ„์น˜ํ•œ ์ปจํ…Œ์ด๋„ˆ ์นธ์˜ ์ธ๋ฑ์Šค ์ €์žฅ 
		queue = new LinkedList<>();
		
		st = new StringTokenizer(br.readLine());
		for (int i = 0; i < 2*N; i++) {
			belt[i] = Integer.parseInt(st.nextToken());
		}//input
		
		left = 0;
		right = N-1;
		int cnt = 0;
		
		while(K>0) { //๋‚ด๊ตฌ๋„๊ฐ€ 0์ธ ์นธ์˜ ๊ฐœ์ˆ˜
			cnt++; //์ง„ํ–‰๋‹จ๊ณ„
			rotate();
		}
		System.out.println(cnt);
	}//end of main
	
	static void rotate() {
		
		// ๋ฒจํŠธ ํšŒ์ „
		left = left-1<0 ? 2*N-1 : left-1;
		right = right-1<0 ? 2*N-1 : right-1;
		
		// ๋กœ๋ด‡ ๋Œ๋ฆฌ๊ธฐ
		int size = queue.size();
		for(int i=0; i<size; i++) {
			int robotIdx = queue.poll();
			if(robotIdx==right) continue; //ํ˜„์žฌ ๋‚ด๋ฆฌ๋Š” ์œ„์น˜์— ์žˆ๋‹ค๋ฉด ํ์—์„œ ๊บผ๋‚ธ ์ƒํƒœ๋กœ ๋
			int newIdx = (robotIdx+1) % (N*2); //๋กœ๋ด‡์ด ์ด๋™ํ•  ์œ„์น˜
			// ์ด๋™ํ•˜๋ ค๋Š” ์œ„์น˜์˜ ๋‚ด๊ตฌ๋„๊ฐ€ 0์ด ์•„๋‹ˆ๊ณ  ๊ทธ ๊ณณ์— ์ด๋ฏธ ๋†“์—ฌ์ง„ ๋กœ๋ด‡์ด ์—†๋‹ค๋ฉด
			if(belt[newIdx]>0 && !queue.contains(newIdx)) {
				belt[newIdx]--;
				if(belt[newIdx]==0) K--;
				if(newIdx==right) continue;
				queue.offer(newIdx);
			}else queue.offer(robotIdx);
		}

		// ๋กœ๋ด‡ ์˜ฌ๋ฆฌ๊ธฐ
		if(belt[left]>0) {
			belt[left]--;
			if(belt[left]==0) K--;
			queue.offer(left);
		}
	}
}//end of class

 

 

 

 

 

 

 

 

 

 

 

๐Ÿ’Ž ๐Ÿ’Ž ๐Ÿ’Ž

 

 

๏ผฐ๏ฝ๏ฝ“๏ฝ”๏ฝ…๏ฝ„ ๏ผข๏ฝ™ ๏ผณ๏ผก๏ผน

๐˜›๐˜ฉ๐˜ข๐˜ฏ๐˜ฌ๐˜ด ๐˜ง๐˜ฐ๐˜ณ ๐˜ณ๐˜ฆ๐˜ข๐˜ฅ๐˜ช๐˜ฏ๐˜จ