백준 2164번 카드2 (C#)

김보근·2025년 6월 26일

백준

목록 보기
37/62

백준 2164번 카드2 (C#)


https://www.acmicpc.net/problem/2164

📌 문제 설명

N장의 카드가 1부터 N까지 순서대로 놓여있다. 아래 과정을 반복하면서 마지막 남은 카드 번호를 출력해야 한다.

제일 위에 있는 카드를 버린다.

그 다음 제일 위에 있는 카드를 맨 아래로 옮긴다.

카드가 한 장 남을 때까지 반복한다.

💭 처음 생각

처음엔 배열로 구현하려고 했는데,
앞에서 제거하고 뒤로 붙이는 작업이 많아서 배열로는 비효율적일 것 같았다.
그래서 Queue를 사용하는 것이 적합하다고 판단했다.

🧠 사용한 자료구조: Queue

Queue는 선입선출(FIFO) 구조로,
앞에서 꺼내고(Dequeue) 뒤에 넣는(Enqueue) 작업에 매우 적합하다.

✅ 핵심 메서드 정리

메서드설명
Enqueue(x)큐 뒤에 x 추가
Dequeue()큐 앞에서 값을 꺼내고 제거
Peek()큐 앞의 값을 꺼내지 않고 확인
Count큐에 남아있는 요소 개수

🔍 구현 로직

1부터 N까지 값을 큐에 넣는다.

큐에 카드가 한 장 남을 때까지 다음을 반복한다:

  • 앞의 카드를 버린다 (Dequeue)

  • 다음 카드를 꺼내서 맨 뒤로 보낸다 (Dequeue → Enqueue)

마지막 남은 카드를 출력한다 (Peek)

💻 전체 코드

using System;
using System.Collections.Generic;

namespace backjoon
{
  internal class Program
  {
      static void Main()
      {
          int n = int.Parse(Console.ReadLine());
          Queue<int> queue = new Queue<int>();

          // 1부터 n까지 큐에 넣기
          for (int i = 1; i <= n; i++)
          {
              queue.Enqueue(i);
          }

          // 카드가 한 장 남을 때까지 반복
          while (queue.Count > 1)
          {
              queue.Dequeue(); // 제일 위 카드 버림
              int temp = queue.Dequeue(); // 다음 카드 저장
              queue.Enqueue(temp); // 맨 뒤로 보냄
          }

          // 마지막 남은 카드 출력
          Console.WriteLine(queue.Peek());
      }
  }
}

✨ 배운 점

  • Queue는 특정 순서의 반복적인 처리에 매우 적합한 자료구조였다.

  • queue.Dequeue()는 값을 꺼내고 제거하며,
    int temp = queue.Dequeue();는 꺼낸 값을 저장하고 활용할 수 있다.

  • 문제를 해결할 때 적절한 자료구조를 고르는 것이 핵심이다!

profile
게임개발자꿈나무

0개의 댓글