코딩테스트/c++
카드2 (백준-2164번)
웅드
2023. 7. 4. 17:52
1. 손으로 풀어보기
2. 코드 구현하기 1
#include <iostream>
#include <string>
#include <vector>
#include <queue>
using namespace std;
int card_game(queue<int> card);
int main(){
int N;
cin >> N;
queue<int> card;
int result=0;
for(int i=1; i<=N; i++){
card.push(i);
}
result = card_game(card);
cout << result;
}
int card_game(queue<int> card){
card.pop();
card.push(card.front());
card.pop();
return card.size() == 1 ? card.front() : card_game(card);
}
문제에 시간 제한과 메모리 제한이 존재해 위 코드는 메모리 제한으로 인해 실패해서 다르게 구현해 보았습니다.
3. 코드 구현하기2
#include <iostream>
#include <string>
#include <vector>
#include <queue>
using namespace std;
int main(){
int N;
cin >> N;
queue<int> card;
int result=0;
for(int i=1; i<=N; i++){
card.push(i);
}
while(card.size() > 1){
card.pop();
card.push(card.front());
card.pop();
}
cout << card.front();
}
재귀함수에서 while문으로 바꿔서 구현하니 메모리 제한에 걸리지 않고 성공하게 되었습니다.
참조) Do it! 코딩테스트
반응형