PS_Baekjoon
[백준 C++] 11866번 : 요세푸스 문제 0
SMILELY
2023. 2. 25. 22:52
https://www.acmicpc.net/problem/11866
11866번: 요세푸스 문제 0
첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 1,000)
www.acmicpc.net
풀이 :
1. k만큼 카운트를 하고 k번째 인덱스를 출력한다.
2. 이미 출력한 수는 카운트하지 않는다.
3. n개의 수를 전부 출력하면 종료한다
코드 :
#include <iostream>
using namespace std;
int main(void) {
int n, k, cnt, done;
bool visited[1005];
cin >> n >> k;
for(int i=1; i<=n; i++){
visited[i] = false;
}
done = cnt = 0;
cout << "<";
while(done != n){
for(int i=1; i<=n; i++){
if(!visited[i]){
cnt++;
if(cnt == k){
cout << i;
if(done < n-1){
cout << ", ";
}
cnt = 0;
visited[i] = true;
done++;
}
}
}
}
cout << ">" << endl;
}
- 인덱스를 카운트 할 cnt, n개를 카운트 할 done 변수 선언
- 방문 여부를 판별할 bool배열 visited 선언하고 n개만큼 false로 초기화
- 종료 조건이 n개 출력인 while문 안에 1부터 n까지 탐색하는 for문을 돌린다
- 방문하지 않았다면 카운트를 해주고 k와 같아지면 해당 인덱스를 출력
- cnt 초기화, 해당 visited에 방문 체크, done 카운트를 1 올려준다
- 주의할 부분은 if(done < n-1)
그냥 i와 같이 ", "해줬다가 한번 틀리고 조건을 넣어줬다