๐ง ๋ฌธ์
์์๊ฐ 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;
}
'๐ง ์ฝ๋ฉํ ์คํธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์ธํ๋ฐ C++] 44. ๋ง๊ตฌ๊ฐ ์ ํ๊ธฐ (์ด์งํ์ ์์ฉ) (0) | 2024.05.08 |
---|---|
[์ธํ๋ฐ C++] 43. ๋ฎค์ง๋น๋์ค(์ด์งํ์ ์์ฉ) (0) | 2024.05.07 |
[์ธํ๋ฐ C++] 42. ์ด๋ถ๊ฒ์(์ด์ง ํ์) (0) | 2024.05.07 |
[์ธํ๋ฐ C++] 41. ์ฐ์๋ ์์ฐ์์ ํฉ (0) | 2024.05.07 |
[์ธํ๋ฐ C++] 40. ๊ต์งํฉ(ํฌํฌ์ธํฐ ์๊ณ ๋ฆฌ์ฆ) (2) | 2024.05.02 |