2164: 카드 2(백준)

2021. 9. 29. 14:18문제연습/알고리즘

반응형

 

 

문제 해결 과정)

자료구조 중 하나인 Queue에 대한 개념만 제대로 알고 있다면 쉽게 해결이 가능한 문제였습니다.

코드를 확인하면 다음과 같습니다.

#include <iostream>
#include <queue>
using namespace std;

int main(){
    queue<int> card;
    int N;

    
    cin>>N;
    for(int i=0;i<N;i++)
        card.push(i+1); // 큐에 데이터 초기화 작업진행
        
    for(int i=0;i<N;i++){
        if(card.size()==1) //남은 카드가 한장일 경우 그 카드의 수를 출력
            cout<<card.front();
        
        else{
            card.pop();// 맨 위의 카드를 버린다.
            card.push(card.front()); // 그 다음의 카드를맨 뒤로 보낸다.
            card.pop();
        }
    }
}

 

 

조금 더 보강하자면 scanf 함수는 입력값의 검증 과정이 없어서 Overflow를 일으킬 가능성이 존재합니다.

 

특히나 문자 배열에서 사용되는 경우 Stack Overflow를 일으켜 의도치 않은 동작을 발생시킬 수 있으므로 보다 안전한 scanf_s 함수를 이용하는 것이 좋겠죠?

 

아래는 scanf_s 함수의 사용 예제 코드를 작성해 놓았으니 참고 바랍니다.

#include <stdio.h>
 
int main(){
    int a;
    scanf_s("%d", &a, sizeof(a));
    printf("%d\n", a);
    return 0;
}

 

 

반응형

'문제연습 > 알고리즘' 카테고리의 다른 글

4673: 셀프 넘버  (0) 2022.01.16
11047: 동전 0(백준)  (0) 2022.01.07
10733: 제로(백준)  (0) 2021.09.19
10828: 스택(백준)  (0) 2021.09.19
3. Brute Force (1)  (0) 2020.02.22