분수 합
문제설명
카드의 동작을 수행하고 난 결과를 출력시킨다.
알고리즘
- 몇 장의 카드가 있는지 입력 받는다.
- queue에 값을 채워 넣는다.
- 문제에서 주어진 대로 동작을 하기위해 반복문 내에서 카드가 1장 남을 때 까지 반복한다.
- 맨 앞의 값을 지우고 그 다음 값을 꺼내서 맨 뒤에 넣는다.
- 가장 마지막에 1개 남은 카드의 값을 출력시킨다.
#include <stdio.h>
#include <iostream>
#include <queue>
using namespace std;
int main(void)
{
ios::sync_with_stdio(0);
cin.tie(NULL);
int N;
cin >> N;
queue<int> q;
for (int i = 0; i < N; i++)//값 입력
q.push(i + 1);
while (q.size() != 1)//값을 빼고 뒤집는 행위
{
q.pop();
int num = q.front();
q.pop();
q.push(num);
}
cout << q.front();//남은 값 출력
return 0;
}
고찰
이번 문제는 카드의 동작을 단순하게 반복 하면된다.FIFO(first in first out)의 특성을 가진 queue
를 사용하면 쉽게 풀 수 있다.
'Algorithm' 카테고리의 다른 글
[백준 2805] 나무 자르기 (0) | 2021.07.30 |
---|---|
[백준 1735] 분수 합 (0) | 2021.07.30 |
[백준 3184] 양 (0) | 2021.07.30 |
[백준 1715] 카드 정렬하기 (0) | 2021.07.30 |
[백준 2504] 괄호의 값 (0) | 2021.07.29 |