-
[백준] 2161 카드1 - Java알고리즘 문제 풀이 2024. 4. 24. 01:25
문제 - 카드1
https://www.acmicpc.net/problem/2161
문제 설명
입력
첫째 줄에 정수 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