오늘의 알고리즘

[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;
}

이 분이 생각한 알고리즘에 똑같이 푸신 것 같아서 가져와봤다.