코딩가딩가딩/알통

BOJ 2164 카드 (C++)

worldforest 2021. 1. 6. 22:11

 

BOJ 2164 S4 카드

 

 

#include <iostream>
#include <queue>

using namespace std;

int main(){
    ios::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);
    int N, ans;
    cin >> N;

    queue<int> Q;
    for(int i = 1; i <= N; i++){
        Q.push(i);
    }
    
    while(Q.size() != 1){
        Q.pop();
        Q.push(Q.front());
        Q.pop();
    }
    cout << Q.front();
}

 

💡 how 

1 ~ N까지 큐에 넣으면 1부터 pop()할 수 있겠다

pop()하고 맨 앞에 있는 값을 push()하고 pop()하다가

하나만 남았을 때 출력!

 

원래는 아래처럼 생각했는데 길이가 1이아닐때 까지로 while문 범위를 정하고

front()값을 바로 push()했다.

길이가 1개일 때 맨 앞에 있는(하나 남은)값이 출력된다.

 

왜 처음에 아래처럼 생각했지? 더 쉽게 생각해야지 :)

 

더보기
#include <iostream>
#include <queue>

using namespace std;

int main(){
    ios::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);
    int N, ans;
    cin >> N;

    queue<int> Q;
    for(int i = 1; i <= N; i++){
        Q.push(i);
    }
    
    int answer,temp;
    while(!Q.empty()){
        Q.pop();
        temp = Q.front();
        if(Q.size() == 1){
        	answer = temp;
            break;
        }
        Q.pop();
        Q.push(temp);
    }
    cout << answer;
}
반응형