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

[๋ฐฑ์ค€] 1592๋ฒˆ: ์˜์‹์ด์™€ ์นœ๊ตฌ๋“ค(๊ตฌํ˜„, ์ˆ˜ํ•™, ์‹œ๋ฎฌ๋ ˆ์ด์…˜)

by ์ฃผ๋ฐœ2 2020. 2. 21.
๋ฐ˜์‘ํ˜•

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

 

1592๋ฒˆ: ์˜์‹์ด์™€ ์นœ๊ตฌ๋“ค

์ผ๋‹จ 1๋ฒˆ์ด ๊ณต์„ ์žก๋Š”๋‹ค. 1๋ฒˆ์€ ๊ณต์„ ํ•œ ๋ฒˆ ์žก์•˜๊ธฐ ๋•Œ๋ฌธ์—, ๊ณต์„ 3๋ฒˆ์—๊ฒŒ ๋˜์ง„๋‹ค. 3๋ฒˆ์€ ๊ณต์„ ํ•œ ๋ฒˆ ์žก์•˜๊ธฐ ๋•Œ๋ฌธ์—, ๊ณต์„ 5๋ฒˆ์—๊ฒŒ ๋˜์ง„๋‹ค. 5๋ฒˆ์€ 2๋ฒˆ์—๊ฒŒ ๋˜์ง€๊ณ , 2๋ฒˆ์€ 4๋ฒˆ์—๊ฒŒ ๋˜์ง„๋‹ค. 4๋ฒˆ์€ 1๋ฒˆ์—๊ฒŒ ๋˜์ง„๋‹ค. 1๋ฒˆ์€ ์ด์ œ ๊ณต์„ ๋‘ ๋ฒˆ ์žก์•˜๊ธฐ ๋•Œ๋ฌธ์—, ๊ณต์„ 4๋ฒˆ์—๊ฒŒ ๋˜์ง„๋‹ค. 4๋ฒˆ์€ 2๋ฒˆ์—๊ฒŒ ๋˜์ง€๊ณ , 2๋ฒˆ์€ 5๋ฒˆ์—๊ฒŒ ๋˜์ง€๊ณ , 5๋ฒˆ์€ 3๋ฒˆ์—๊ฒŒ ๋˜์ง€๊ณ , ๋งˆ์ง€๋ง‰์œผ๋กœ 3๋ฒˆ์€ 1๋ฒˆ์—๊ฒŒ ๋˜์ง„๋‹ค. 1๋ฒˆ์€ ์ด์ œ ๊ณต์„ ์„ธ ๋ฒˆ ์žก์•˜๊ธฐ ๋•Œ๋ฌธ์—, ๊ฒŒ์ž„์€ ๋๋‚œ๋‹ค.

www.acmicpc.net

์ฝ”๋“œ

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

public class Main {

	public static void main(String[] args) throws IOException {
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(bf.readLine());
		/*
		 * 1 ~ N๊นŒ์ง€ ์‹œ๊ณ„๋ฐฉํ–ฅ์œผ๋กœ ์•‰๋Š”๋‹ค.
		 * ๊ณต์„ ๋˜์ง€๋ฉฐ ๋ฐ˜๋ณตํ•˜๊ณ , ํ•œ ์‚ฌ๋žŒ์ด ๊ณต์„ M๋ฒˆ ๋ฐ›์œผ๋ฉด ๊ฒŒ์ž„์ด ์ข…๋ฃŒ(ํ˜„์žฌ ๋ฐ›์€ ๊ณต๋„ ํฌํ•จ)
		 * ๊ณต์„ ๋˜์งˆ๋•Œ, ํ˜„์žฌ ๋ฐ›์€ ํšŸ์ˆ˜๊ฐ€ ํ™€์ˆ˜ -> ์‹œ๊ณ„๋ฐฉํ–ฅ์œผ๋กœ L๋ฒˆ์งธ ์‚ฌ๋žŒ์—๊ฒŒ, ์ง์ˆ˜ -> ๋ฐ˜์‹œ๊ณ„๋ฐฉํ–ฅ์œผ๋กœ L๋ฒˆ์งธ ์‚ฌ๋žŒ์—๊ฒŒ ๊ณต๋˜์ง
		 */
		int N = Integer.parseInt(st.nextToken());	
		int M = Integer.parseInt(st.nextToken());	
		int L = Integer.parseInt(st.nextToken());	
		int ballCount = 0;
		int[] arr = new int[N+1];
		int index = 1;
		arr[1] = 1;	// ํ˜„์žฌ ๊ณต ํฌํ•จํ•˜๋ฏ€๋กœ ์ฒซ ๋ฒˆ์งธ ์‚ฌ๋žŒ +1
		
		while(true) {
			// ํ˜„์žฌ ๋ฐ›์€ ์‚ฌ๋žŒ์ด ํ™€์ˆ˜๋ฒˆ ๋ฐ›์•˜์„ ๊ฒฝ์šฐ -> ์‹œ๊ณ„๋ฐฉํ–ฅ(index + L)
			// ํ˜„์žฌ ๋ฐ›์€ ์‚ฌ๋žŒ์ด ์ง์ˆ˜๋ฒˆ ๋ฐ›์•˜์„ ๊ฒฝ์šฐ -> ๋ฐ˜์‹œ๊ณ„(index - L)
			index = (arr[index] % 2 == 1) ? (index + L) : index - L; 
			
			// ๋‹ค์Œ ๋ฐ›์„ ์‚ฌ๋žŒ์ด ๋ฐฐ์—ด์˜ ๋ฒ”์œ„ ๋ฒ—์–ด๋‚ฌ์„ ๋•Œ(์‹œ๊ณ„ ๋ฐฉํ–ฅ์ผ ๋•Œ)
			if(index > N) 
				// ์ธ์›๋งŒํผ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๊ฐ€ ๋‹ค์Œ์— ๋ฐ›๋Š” ์‚ฌ๋žŒ์ž„
				// index = 7, N = 5 ์ด๋ฉด ๋‹ค์Œ์—” 2๋ฒˆ์งธ ์‚ฌ๋žŒ์ด ๋ฐ›์Œ.
				index %= N;	
			
			// ๋‹ค์Œ ๋ฐ›์„ ์‚ฌ๋žŒ์ด ๋ฐฐ์—ด์˜ ๋ฒ”์œ„ ๋ฒ—์–ด๋‚ฌ์„ ๋•Œ(๋ฐ˜์‹œ๊ณ„ ๋ฐฉํ–ฅ์ผ ๋•Œ)
			else if(index < 1) 
				// 1๋ฒˆ์ด ๋ฐ˜์‹œ๊ณ„๋ฐฉํ–ฅ์œผ๋กœ 4๋ฒˆ์—๊ฒŒ ์ค˜์•ผํ• ๋•Œ -> (-1) + 5 = 4
				index += N;
			
			arr[index] ++;	// ๊ณต ๋ฐ›๋Š” ์‚ฌ๋žŒ ++
			ballCount ++;	// ๊ณต ๋˜์ง„ ํšŸ์ˆ˜ ++
			
			// ํ•œ ์‚ฌ๋žŒ์ด ๊ณต์„ M๋ฒˆ ๋ฐ›์œผ๋ฉด ์ข…๋ฃŒ
			if(arr[index] == M)
				break;
		}
		
		System.out.println(ballCount);
		bf.close();
	}

}

๋ฌธ์ œ์ดํ•ด

๋ฌธ์ œ๋ฅผ ํ‘ธ๋Š”๋ฐ ์ข€ ๊ฑธ๋ ธ๋‹ค ...

์ผ๋‹จ ์กฐ๊ฑด์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

 

1. 1 ~ N๊นŒ์ง€ ์›ํ˜•์œผ๋กœ ์‹œ๊ณ„๋ฐฉํ–ฅ์œผ๋กœ ์•‰์•„์žˆ๊ณ ,

2. 1๋ฒˆ ์‚ฌ๋žŒ๋ถ€ํ„ฐ ํ˜„์žฌ ๊ณต์„ ๋ฐ›์€ ํšŸ์ˆ˜๊ฐ€ ํ™€์ˆ˜์ด๋ฉด ์‹œ๊ณ„ ๋ฐฉํ–ฅ์œผ๋กœ L๋ฒˆ์งธ ์žˆ๋Š” ์‚ฌ๋žŒ์—๊ฒŒ,

3. ํ˜„์žฌ ๊ณต์„ ๋ฐ›์€ ํšŸ์ˆ˜๊ฐ€ ์ง์ˆ˜์ด๋ฉด ๋ฐ˜์‹œ๊ณ„ ๋ฐฉํ–ฅ์œผ๋กœ L๋ฒˆ์งธ ์žˆ๋Š”์‚ฌ๋žŒ์—๊ฒŒ ๊ณต์„ ๋˜์ง„๋‹ค.

4. ํ•œ ์‚ฌ๋žŒ์ด ๊ณต์„ M๋ฒˆ ๋ฐ›์œผ๋ฉด ๊ฒŒ์ž„์€ ๋๋‚œ๋‹ค.(์ง€๊ธˆ ๋ฐ›์€ ๊ณต๋„ ํฌํ•จํ•˜์—ฌ ์„ผ๋‹ค.)

 

ํ’€์ด

ํ˜„์žฌ 1๋ฒˆ์—๊ฒŒ ๊ณต์ด ์žˆ๊ณ , ์ด ๊ณต๋„ ๋ฐ›์€๊ณต์œผ๋กœ ํฌํ•จํ•˜๋ฏ€๋กœ ์ฒซ ๋ฒˆ์งธ ์‚ฌ๋žŒ์€ +1๋กœ ์„ค์ •ํ•œ๋‹ค.

 

* ํ˜„์žฌ ๊ณต์„ ๋ฐ›์€ ์‚ฌ๋žŒ์ด ๋ฐ›์€ ํšŸ์ˆ˜๊ฐ€ ํ™€์ˆ˜์ผ ๊ฒฝ์šฐ -> ์‹œ๊ณ„๋ฐฉํ–ฅ์ด๋ฏ€๋กœ +L

* ํ˜„์žฌ ๊ณต์„ ๋ฐ›์€ ์‚ฌ๋žŒ์ด ๋ฐ›์€ ํšŸ์ˆ™๊ฐ€ ์ง์ˆ˜์ผ ๊ฒฝ์šฐ -> ๋ฐ˜์‹œ๊ณ„๋ฐฉํ–ฅ์ด๋ฏ€๋กœ -L์„ ํ•ด์ค€๋‹ค.

* ๋ฐฐ์—ด ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚  ๊ฒฝ์šฐ๋ฅผ ์ƒ๊ฐํ•ด์•ผ ํ•œ๋‹ค.(1 ~ N๊นŒ์ง€ ์ด๋ฏ€๋กœ N๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜, 1๋ณด๋‹ค ์ž‘์„๋•Œ)

* ์œ„ ๋ฒ”์œ„์— ๋งž๊ฒŒ ์กฐ๊ฑด์„ ์„ค์ •ํ•˜๊ณ , ๋‹ค์Œ ๋ฐ›๋Š” ์‚ฌ๋žŒ์˜ index๋ฅผ ๊ตฌํ•œ๋‹ค.

* ๊ธฐํƒ€ ์„ค๋ช…์€ ์ฃผ์„.

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€