-
[백준] 2161 카드1 - Java알고리즘 문제 풀이 2024. 4. 24. 01:25
문제 - 카드1
https://www.acmicpc.net/problem/2161
2161번: 카드1
N장의 카드가 있다. 각각의 카드는 차례로 1부터 N까지의 번호가 붙어 있으며, 1번 카드가 제일 위에, N번 카드가 제일 아래인 상태로 순서대로 카드가 놓여 있다. 이제 다음과 같은 동작을 카드가
www.acmicpc.net
문제 설명
입력
첫째 줄에 정수 N(1 ≤ N ≤ 1,000)이 주어진다.
출력
첫째 줄에 버리는 카드들을 순서대로 출력한다. 제일 마지막에는 남게 되는 카드의 번호를 출력한다.
예제 입력
7
예제 출력
1 3 5 7 4 2 6
접근 방법
- 문제를 보면 1번 부터 N 까지의 카드를 차례대로 한장을 버리고 그 다음 한장을 다시 아래에 넣는다 이런식으로 반복을 하는데 괜찮은 자료구조가 뭐가 있을까 생각을 하다가 스택은 후입 선출이라 안될 것 같고 선입 선출인 Queue를 사용하면 될 것 같다고 생각을 하였다
- N은 1 이상 1000 이하 이므로 int형으로 선언해도 될 것 같다
- N을 입력을 받으면 1 부터 N 까지의 숫자를 queue에 넣고 while문으로 queue가 비어 있을때까지 위에 있는 것을 반복하여 소모 시키면 될 것 같다
코드 작성
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.LinkedList; import java.util.Queue; public class Main { public static void main(String[] args) throws IOException { try (BufferedReader br = new BufferedReader(new InputStreamReader(System.in))) { int N = Integer.parseInt(br.readLine()); Queue<Integer> queue = new LinkedList<>(); for (int i = 1; i <= N; i++) { queue.add(i); } while (!queue.isEmpty()) { System.out.print(queue.poll() + " "); if (queue.isEmpty()) { break; } queue.add(queue.poll()); } } } }
풀고 느낀점
1. 이문제는 단순하게 자료구조를 잘 선택해서 해결하는 문제다
2. 어렵지 않은데 어떤 자료구조를 사용해야 더 효율적으로 해결할 수 있는 문제인지 생각을 해야겠다
'알고리즘 문제 풀이' 카테고리의 다른 글
[백준] 10845 큐 -Java (1) 2024.04.25 [백준] 1966 프린터 큐 - Java (0) 2024.04.25 [백준] 2470 두 용액 - Java (0) 2024.04.22 [프로그래머스] 카드 뭉치 - Java (1) 2024.04.22 [프로그래머스] 부족한 금액 계산하기 - Java (0) 2024.04.21