๐Ÿง ์ฝ”๋”ฉํ…Œ์ŠคํŠธ

[์ธํ”„๋Ÿฐ C++] 45. ๊ณต์ฃผ ๊ตฌํ•˜๊ธฐ (์กฐ์„ธํผ์Šค)

peewoong 2024. 5. 8. 09:49

๐Ÿง ๋ฌธ์ œ

์™•์ž๊ฐ€ N๋ช…์ด ์žˆ๋Š”๋ฐ, ์„œ๋กœ ๊ณต์ฃผ๋ฅผ ๊ตฌํ•˜๋Ÿฌ ๊ฐ€๊ฒ ๋‹ค๊ณ  ํ•œ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ ๊ณต์ฃผ๋ฅผ ๊ตฌํ•˜๋Ÿฌ ๊ฐˆ ์™•์ž๋ฅผ ๊ฒฐ์ •ํ•˜๊ธฐ๋กœ ํ•œ๋‹ค. ์™•์€ ์™•์ž๋“ค์„ ๋‚˜์ด ์ˆœ์œผ๋กœ 1~N๋ฒˆ๊นŒ์ง€ ์ฐจ๋ก€๋กœ ๋ฒˆํ˜ธ๋ฅผ ๋งค๊ธด๋‹ค. ๊ทธ๋ฆฌ๊ณ  1๋ฒˆ ์™•์ž๋ถ€ํ„ฐ N๋ฒˆ ์™•์ž๊นŒ์ง€ ์ˆœ์„œ๋Œ€๋กœ ์‹œ๊ณ„ ๋ฐฉํ–ฅ์œผ๋กœ ๋Œ์•„๊ฐ€๋ฉฐ ๋™๊ทธ๋ž—๊ฒŒ ์•‰๊ฒŒ ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  1๋ฒˆ ์™•์ž๋ถ€ํ„ฐ ์‹œ๊ณ„๋ฐฉํ–ฅ์œผ๋กœ ๋Œ์•„๊ฐ€๋ฉด 1๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์—ฌ ๋ฒˆํ˜ธ๋ฅผ ์™ธ์น˜๊ฒŒ ํ•œ๋‹ค. ํ•œ ์™•์ž๊ฐ€ ํŠน์ •  ์ˆซ์ž  K๋ฅผ ์™ธ์น˜๋ฉด ๊ทธ ์™•์ž๋Š” ๊ณต์ฃผ๋ฅผ ๊ตฌํ•˜๋Ÿฌ ๊ฐ€๋Š”๋ฐ์„œ ์ œ์™ธ๋˜๊ณ , ์› ๋ฐ–์œผ๋กœ ๋‚˜์˜ค๊ฒŒ ๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‹ค์Œ ์™•์ž๋ถ€ํ„ฐ ๋‹ค์‹œ 1๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์—ฌ ๋ฒˆํ˜ธ๋ฅผ ์™ธ์นœ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•ด์„œ ๋งˆ์ง€๋ง‰๊นŒ์ง€ ๋‚จ์€ ์™•์ž๊ฐ€ ๊ณต์ฃผ๋ฅผ ๊ตฌํ•˜๋Ÿฌ ๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด 8๋ช…์˜ ์™•์ž๊ฐ€ ์žˆ์„ ๋•Œ, 3์„ ์™ธ์นœ ์™•์ž๊ฐ€ ์ œ์™ธ๋œ๋‹ค๊ณ  ํ•˜์ž. ์ฒ˜์Œ์— 3๋ฒˆ ์™•์ž๊ฐ€ 3์„ ์™ธ์ณ ์ œ์™ธ๋˜๋ฉฐ, ์ด์–ด 6, 1, 5, 2, 8, 4๋ฒˆ ์™•์ž๊ฐ€ ์ฐจ๋ก€๋Œ€๋กœ ์ œ์™ธ๋˜๊ณ  ๋งˆ์ง€๋ง‰๊นŒ์ง€ ๋‚จ๊ฒŒ ๋œ 7๋ฒˆ ์™•์ž๊ฐ€ ๊ณต์ฃผ๋ฅผ ๊ตฌํ•˜๋Ÿฌ ๊ฐ„๋‹ค.

N๊ณผ K๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ ๊ณต์ฃผ๋ฅผ ๊ตฌํ•˜๋Ÿฌ ๊ฐˆ ์™•์ž์˜ ๋ฒˆํ˜ธ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

 

โœจ 1ํŠธ (๊ฐ•์˜ ํ’€์ด)

1. ์™•์ž ๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด์„œ ๋ชจ๋‘ 0์œผ๋กœ ์ดˆ๊ธฐํ™”

2. ๊ฐ’์ด 0์ด๋ฉด์„œ, k์— ํ•ด๋‹นํ•˜๋ฉด +1 ํ•ด์ค€๋‹ค.

3. position ๊ฐ’์ด n ๋ณด๋‹ค ํฌ๋ฉด ๋‹ค์‹œ 1๋กœ ๋Œ์•„์˜จ๋‹ค.

4. break point๊ฐ€ n-1์ผ ๋•Œ, while๋ฌธ ํƒˆ์ถœ ๋ฐ ๋ฐฐ์—ด์˜ ๊ฐ’์ด 0์ธ ์™•์ž๊ฐ€ ๋‹ต์ด ๋œ๋‹ค.

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main(void){
	freopen("input.txt", "rt", stdin);
	
	int n, k, pos = 0, bp = 0, cnt = 0;
	scanf("%d %d", &n, &k);
	vector<int> prince(n+1);
	
	while(1){
		pos++;
		
		if(pos > n){
			pos = 1;
		}
		
		if(prince[pos] == 0){
			cnt++;
			if(cnt == k){
				prince[pos] = 1;
				cnt = 0;
				bp++;
			}
		}
		
		if(bp == n-1){
			break;
		}
	}
	
	for(int i = 1; i <= n; ++i){
		if(prince[i] == 0){
			printf("%d", i);
			break;
		}
	}
	
	return 0;
}