Problem Solving/백준

[백준/c++] 2164 - 카드2

세고래 2021. 3. 2. 04:42

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

 

2164번: 카드2

N장의 카드가 있다. 각각의 카드는 차례로 1부터 N까지의 번호가 붙어 있으며, 1번 카드가 제일 위에, N번 카드가 제일 아래인 상태로 순서대로 카드가 놓여 있다. 이제 다음과 같은 동작을 카드가

www.acmicpc.net


1) 풀이

이 문제는 고민할 필요도 없이 그냥 코드를 적어내려갔고, 

내 예상대로 한 번에 정답을 맞혔다 😁

1) 카드를 빼는 경우는 맨앞에서만 일어나고, 카드를 추가하는 경우는

맨 뒤에서만 일어나기 때문에 를 이용하여 푼다.

2) 1부터 n까지의 카드를 큐에 넣어준다

3) 한장 남을 때까지 pop과 push를 반복한다.

3) 반복이 끝날 때, 카드는 한장밖에 없으므로 제일 앞의 요소를 출력한다.

 

2) 최종 소스코드
#include <bits/stdc++.h>
using namespace std;
queue<int>q; //카드더미
int n;
int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);

	cin >> n;
	for (int i = 1; i <= n; i++) { //1부터 n까지 카드 입력
		q.push(i);
	} 
	while (q.size() != 1) { //카드가 한장 남을때까지 반복
		q.pop(); //처음 카드 버리기
		q.push(q.front()); //맨 처음 카드 맨 뒤로 보내기
		q.pop(); //첫 카드를 뒤로 보냈으니 pop
	}
	cout << q.front(); //마지막 카드 출력
}
3) 참고자료

 

728x90

'Problem Solving > 백준' 카테고리의 다른 글

[백준/c++] 4889 - 안정적인 문자열  (0) 2021.03.05
[백준/c++] 4949 - 균형잡힌 세상  (0) 2021.03.04
[백준/c++] 5430 - AC  (0) 2021.03.04
[백준/c++] 1021 - 회전하는 큐  (0) 2021.03.01
[백준/c++] 1874 - 스택 수열  (0) 2021.02.25