© 2025 anveloper.dev
GitHub·LinkedIn·Contact

목차

  • 문제
  • 입력
  • 출력
  • 예제
  • 풀이
  • 코드
  • 복잡도
풀이 목록으로 돌아가기

BOJ 2161 - 카드1

2022-03-13
BOJ
실버 V
java
원본 문제 보기
구현
자료 구조
큐

문제

BOJ 2161 - 카드1

1부터 N까지 번호가 적힌 카드가 위에서 아래로 순서대로 놓여 있다. 제일 위 카드를 버리고, 그 다음 카드를 제일 아래로 옮기는 동작을 반복할 때, 버리는 순서대로 카드를 출력하라.

입력

첫째 줄에 정수 N (1 이상 1,000 이하)이 주어진다.

출력

버리는 카드들을 순서대로 출력하고, 마지막에 남는 카드도 출력한다 (공백 구분).

예제

입력출력
41 3 2 4

풀이

큐로 카드 더미를 구현하여 버리기/이동 동작을 시뮬레이션한다.

  1. 1부터 N까지를 큐에 순서대로 넣는다
  2. 카드가 2장 이상일 때: 맨 앞 카드를 버리고(poll → 출력), 다음 맨 앞 카드를 맨 뒤로 보낸다(poll → offer)
  3. 마지막 남은 한 장을 출력한다

핵심 아이디어: BOJ 2164(카드2)와 동일한 동작이지만, 버리는 카드도 모두 출력해야 한다는 점이 다르다.

코드

package com.ssafy.an.day049;
 
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
 
public class Day24BOJ2161카드1 { // 2161 카드1
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		StringBuilder sb = new StringBuilder();
		Queue<Integer> q = new LinkedList<>();
		int N = sc.nextInt();
		for (int n = 1; n <= N; n++) {
			q.add(n);
		}
		while (true) {
			if (q.size() == 1)
				break;
			sb.append(q.poll()).append(" ");
			q.add(q.poll());
		}
		System.out.println(sb.append(q.poll()));
		sc.close();
	}
}

복잡도

  • 시간: O(N)
  • 공간: O(N)