본문 바로가기

백준

C++[백준]12873번 기념품

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

 

12873번: 기념품

백준이는 BOJ 알고리즘 캠프 참가자 중 한 명에게 기념품을 주려고 한다. 하지만, 많은 참가자 중에서 어떤 사람을 뽑아서 기념품을 줘야하는지 고민이 되기 시작했다. 따라서, 백준이는 게임을

www.acmicpc.net

 

솔루션


나는 deque를 이용해 접근을하였다.

 

1) 먼저 dequ에 1~N 까지 넣어준다. (push_back())

2) t=1 턴 부터 시작해서 N-1턴 까지 반복하면서 아래의 과정을 반복한다.

 2-1) t^3을 구한다.

 2-2) 해당 값을 (N명 - t턴) 값으로 나눠준다.

 2-3) 나머지 만큼 dq.push_back(dq.front()), dq.pop_front() 를 해준다.

 

3) dq에 남은 마지막 한개를 출력한다.

 

 

코드


#define ll long long int
#include <iostream>
#include <cmath>
#include <deque>
using namespace std;

int N;
deque<int> dq;
int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(NULL); cout.tie(NULL);

	cin >> N;
	for (int i = 1; i <= N; i++) {
		dq.push_back(i);
	}

	for (int i = 1; i <= N - 1; i++) {
		ll p = pow(i, 3);
		p--;
		p %= (N - i + 1);

		while (p--) {
			dq.push_back(dq.front());
			dq.pop_front();
		}
		dq.pop_front();
	}
	cout << dq.front() << "\n";
}

'백준' 카테고리의 다른 글

C++[백준]3653번 영화 수집  (0) 2023.04.19
C++[백준]3006번 터보소트  (0) 2023.04.18
C++[백준]14939번 불 끄기  (3) 2023.04.14
C++[백준]9527번 1의 개수 세기  (2) 2023.04.13
C++[백준]16724번 피리부는 사나이  (0) 2023.04.13