오늘의 알고리즘
[C++] 백준 2164 카드2
하늘하늘 .
2022. 6. 12. 17:05
#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;
}
이 분이 생각한 알고리즘에 똑같이 푸신 것 같아서 가져와봤다.