※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 3895번 문제인 그리고 하나가 남았다이다.
문제는 아래 링크를 확인하자.

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

 

3895번: 그리고 하나가 남았다

입력은 여러개의 데이터 행이며, 각 데이터는 다음과 같은 3개의 숫자로 이루어진다. n k m 마지막 데이터 행 다음은 3개의 0으로 이루어진 행이다. 각 수는 다음 범위를 만족한다. 2 ≤ n ≤ 10000, 1

www.acmicpc.net

주어진 문제는 Josephus Problem의 일종으로 볼 수 있다. 다음 글(링크)을 참고하여 Josephus problem의 풀이를 습득해 문제를 해결하자.

 

N이 1만 이하이고 테스트케이스가 100개 이하이므로 위의 글의 O(N) 해법을 이용하는 것으로 문제를 충분히 해결할 수 있다.

 

아래는 제출한 소스코드이다.

#include <iostream>
using namespace std;

int N, K, M;
int idx;

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);

	cin >> N >> K >> M;
	while (N) {
		for (int n = 1; n < N; n++) {
			idx = (idx + K) % n;
		}

		cout << (idx + M) % N + 1 << '\n';

		cin >> N >> K >> M;
	}
}
728x90

'BOJ' 카테고리의 다른 글

[BOJ 11946 // C++] ACM-ICPC  (0) 2023.09.10
[BOJ 27198 // C++] kex  (0) 2023.09.08
[BOJ 27285 // C++] L-Board  (0) 2023.09.06
[BOJ 3288 // C++] BEER  (0) 2023.09.05
[BOJ 3299 // C++] POWER  (0) 2023.09.04

+ Recent posts