#include <iostream>
#include <queue>
int main()
{
int N = 0;
std::cin >> N;
std::deque<int> dque = {};
for (int i = 1; i <= N; ++i)
{
dque.push_back(i);
}
while (dque.size() != 1)
{
dque.pop_front();
dque.push_back(dque.front());
dque.pop_front();
}
std::cout << dque.front();
return 0;
}
양 옆을 삽입, 추출을 하기 위해서 deque를 썻고
생각해보니까 처음에 실행하면 짝수만 남고 계속해서 2의 곱으로 늘어나서 알고리즘이 보이길래 찾아봤다.
#include<stdio.h>
int main()
{
int N;
scanf("%d",&N);
int two=2;
if(N==1)
{
printf("%d",1);
return 0;}
while(two<N)
two*=2;
two/=2;
printf("%d",(N-two)*2);
return 0;
}
이 분이 생각한 알고리즘에 똑같이 푸신 것 같아서 가져와봤다.
'오늘의 알고리즘' 카테고리의 다른 글
[C++] 백준 11723 집합 (0) | 2022.06.14 |
---|---|
[C++] 백준 20920 영단어 암기는 어려워 (0) | 2022.06.13 |
[C++] 백준 2075 N번째 큰 수 (0) | 2022.06.11 |
[C++] 백준 21921 블로그 (0) | 2022.06.11 |
[C++] 백준 9655 돌 게임 (0) | 2022.06.09 |