백준(BAEKJOOB) 2164번 카드 // c++언어
2023. 2. 3. 14:55ㆍ언어/c, c++
728x90
문제
N장의 카드가 있다. 각각의 카드는 차례로 1부터 N까지의 번호가 붙어 있으며, 1번 카드가 제일 위에, N번 카드가 제일 아래인 상태로 순서대로 카드가 놓여 있다.
이제 다음과 같은 동작을 카드가 한 장 남을 때까지 반복하게 된다. 우선, 제일 위에 있는 카드를 바닥에 버린다. 그다음, 제일 위에 있는 카드를 제일 아래에 있는 카드 밑으로 옮긴다.
예를 들어 N=4인 경우를 생각해 보자. 카드는 제일 위에서부터 1234 의 순서로 놓여있다. 1을 버리면 234가 남는다. 여기서 2를 제일 아래로 옮기면 342가 된다. 3을 버리면 42가 되고, 4를 밑으로 옮기면 24가 된다. 마지막으로 2를 버리고 나면, 남는 카드는 4가 된다.
N이 주어졌을 때, 제일 마지막에 남게 되는 카드를 구하는 프로그램을 작성하시오.
문제풀이
이 문제를 보고 일단은
123456 시작
23456 삭제
34562 삽입
4562 삭제
5624 삽입
624 삭제
246 삽입
46 삭제
64 삽입
4 삭제
일단 이런식이니까
일단은 큐를 만들어주고 반복문을 이용해
큐에 push해준다. 삽입과 삭제를 반복한 후
큐사이즈가 한개 남을 때까지 조건을 준다.
프런트 한 값을 맨 앞에 넣어주면 답이 나올 것이라고 생각했다.
큐에 숫자를 넣어준후
queue<int>queue;
int n;
cin >> n;
for (int i = 1; i <= n; i++) {
queue.push(i);
}
한 개 남을 때까지 반복 후 pop을 이용해 한 개가 남을때까지
반복
while (queue.size() > 1) {
queue.pop();
int x=queue.front();
queue.push(x);
queue.pop();
}
한개가 남은 숫자 출력
cout << queue.front() << ' ';
총 코드
#include <vector>
#include <queue>
#include <iostream>
using namespace std;
int main() {
queue<int>queue;
int n;
cin >> n;
for (int i = 1; i <= n; i++) {
queue.push(i);
}
while (queue.size() > 1) {
queue.pop();
int x=queue.front();
queue.push(x);
queue.pop();
}
cout << queue.front() << ' ';
}
728x90
'언어 > c, c++' 카테고리의 다른 글
(백준BAEKJOOB )- 10809번 -알파벳 찾기 문제 "c++" (0) | 2023.02.10 |
---|---|
(백준BAEKJOOB )- 1158번 요세푸스 문제 c++ (0) | 2023.02.10 |
백준(BAEKJOOB) 2606번 바이러스 // c++언어 (0) | 2023.02.03 |
백준(BAEKJOOB) 1260번 DFS와 BFS // c++언어 (0) | 2023.02.02 |
백준(BAEKJOOB) 1427번 소트인사이드 c++언어 (0) | 2023.01.24 |