[BOJ] 백준 2164번: 카드 2 (C++)

2025. 4. 7. 17:09·프로그래밍/Algorithm

 

- 문제 출처 : https://www.acmicpc.net/problem/2164


1. 생각

저번 문제에 이어, 큐를 활용하는 문제를 가져왔다.

로직 자체는 엄청 간단하게 보인다.

 

가장 위의 카드를 버리기 -> 다음 위의 카드를 밑에 옮기기

이 형태를 재해석하게 되면,

front 카드 pop() -> push (front 카드번호) -> front 카드 pop()

 

으로 큐에 맞게 해석했다.

옮기는 행위를 직접적으로 할 수 있는 수단이 없어서,

pop하기 전에 미리 해당 번호의 카드를 push 해두는 방식을 취하기로 했다.

 

2. 난관 & 해결 방법

int n;
std::queue <int> q;

std::cin >> n;

 

카드의 총 개수를 n으로 받았다.

그리고 queue를 만들어주었다.

 

for (int i = 0; i < n; i ++)
{
    q.push(i + 1);
}
while (q.size() > 1)
{
    q.pop();
    if (q.size() == 1)
        break ;
    q.push(q.front());
    q.pop();
}
std::cout << q.front() << "\n";

 

그리고 메인 로직인데, 우선은 이 카드들을 모두 처음부터 끝까지 queue에 담아줘야 하므로,

for문을 통해 인덱스 + 1 (인덱스가 0부터지만, 카드는 1부터 시작하므로) 에 해당하는 카드를 push 해줬다.

 

그리고 새로 while문을 하나 만들어서, queue의 size가 1보다 클 동안 반복하도록 한다.

처음에는 pop(), 그리고 그 다음 과정 전에 size가 1이 되었는지 미리 체크하고 다시 돌린다.

그 후 push(front) 과정으로 카드를 먼저 복사하여 주고, pop해준다.

 

마지막 남은 카드를 cout으로 출력해주면 끝이다.

 

3. 코드 및 결론

[ 전체 코드 ]

#include <iostream>
#include <queue>

int main(void){
    int n;
    std::queue <int> q;

    std::cin >> n;
    for (int i = 0; i < n; i ++)
    {
        q.push(i + 1);
    }
    while (q.size() > 1)
    {
        q.pop();
        if (q.size() == 1)
            break ;
        q.push(q.front());
        q.pop();
    }
    std::cout << q.front() << "\n";
}

 

[ 결론 ]

 

큐를 활용하는 문제를 가져왔는데, 상당히 로직이 단순해서 쉽게 짰다.

자료구조 문제들을 풀어보면서 느낀 점은 어떤 문제들이 잔뜩 쏟아졌을 때,

이 문제는 큐, 어떤 문제는 스택.. 이런 식으로 쉽게 분류할 수 있는 능력이 갖춰져야

문제 해결력이 정말 탄탄해지지 않을까 싶다.

 

다른 자료구조들도 하나씩 풀어보며 기반을 잘 쌓아보도록 하겠다.

저작자표시 (새창열림)

'프로그래밍 > Algorithm' 카테고리의 다른 글

[BOJ] 백준 28279번: 덱 2 (C++)  (0) 2025.04.09
[BOJ] 백준 11866번: 요세푸스 문제 0 (C++)  (1) 2025.04.08
[BOJ] 백준 18258번: 큐 2 (C++)  (0) 2025.04.07
[BOJ] 백준 4949번: 균형잡힌 세상 (C++)  (0) 2025.04.06
[BOJ] 백준 10773번: 제로 (C++)  (0) 2025.04.06
'프로그래밍/Algorithm' 카테고리의 다른 글
  • [BOJ] 백준 28279번: 덱 2 (C++)
  • [BOJ] 백준 11866번: 요세푸스 문제 0 (C++)
  • [BOJ] 백준 18258번: 큐 2 (C++)
  • [BOJ] 백준 4949번: 균형잡힌 세상 (C++)
doyoucode
doyoucode
  • doyoucode
    Do You Coding?
    doyoucode
  • 전체
    오늘
    어제
  • Programming Collection
    • 전체글 (73)
      • 프로그래밍 (65)
        • CS (7)
        • Algorithm (15)
        • C (42)
        • Java (1)
      • ETC (8)
        • 정보처리기사 (1)
        • TOEIC Speaking (0)
        • OPIc (0)
        • 영어 (2)
        • 특강, 컨퍼런스 (1)
        • 후기 (0)
      • junk (4)
  • hELLO· Designed By정상우.v4.10.3
doyoucode
[BOJ] 백준 2164번: 카드 2 (C++)
상단으로

티스토리툴바