[ Java ]
import java.util.LinkedList;
import java.util.Queue;
public class 백준2164 {
public int solution(int N) {
Queue<Integer> myQueue = new LinkedList<>();
for (int i=1; i<=N; i++) {
myQueue.add(i);
}
while (myQueue.size() > 1) {
myQueue.poll(); // 큐의 첫 번째 요소 제거
myQueue.add(myQueue.poll()); // 그 다음 요소를 맨 아래로 이동
}
return myQueue.peek();
}
public static void main(String[] args) {
백준2164 s = new 백준2164();
System.out.println(s.solution(6));
}
}
큐(Queue)
- 큐는 FIFO(First In, First Out) 자료구조로, 먼저 들어간 요소가 먼저 나오는 구조이다.
큐의 주요연산
add(element): 큐의 끝에 요소를 추가한다.
poll(): 큐의 앞에서 요소를 제거하고 반환한다.
peek(): 큐의 앞에 있는 요소를 제거하지 않고 반환한다.
LinkedList
- LinkedList는 자바에서 제공하는 자료구조로, 리스트와 큐의 기능을 모두 가지고 있다.
- LinkedList는 큐 인터페이스를 구현하므로 큐처럼 사용할 수 있다.
큐 인터페이스를 구현한 LinkedList 객체를 생성한다.
박싱(Boxing)과 언박싱(Unboxing)
박싱(Boxing):
- 기본형(primitive type) 데이터를 해당하는 래퍼 클래스(wrapper class) 객체로 변환하는 과정
- 예를 들어, int를 Integer 객체로 변환하는 것
언박싱(Unboxing):
- 래퍼 클래스 객체를 다시 기본형 데이터로 변환하는 과정
- 예를 들어, Integer 객체를 int로 변환하는 것
자바의 제네릭은 기본형을 직접 사용할 수 없기 때문에, 기본형 데이터를 제네릭 타입으로 사용하려면 박싱을 통해 래퍼 클래스 객체로 변환해야 한다.
Queue<Integer> myQueue = new LinkedList<>();
Queue<Integer>는 Queue 인터페이스를 Integer 타입으로 제네릭화한 것
LinkedList<>()는 LinkedList 클래스의 인스턴스를 생성하는데, 이 클래스는 Queue 인터페이스를 구현하고 있다.
클래스와 인터페이스
클래스: 객체를 생성하기 위한 설계도이다. 예를 들어, LinkedList는 클래스이다.
인터페이스: 클래스가 구현해야 하는 메서드의 집합이다. 예를 들어, Queue는 인터페이스이다.
LinkedList와 Queue
LinkedList는 자바에서 제공하는 클래스입니다. 이 클래스는 여러 가지 자료구조의 기능을 제공합니다.
Queue는 자바에서 제공하는 인터페이스입니다. 이 인터페이스는 큐 자료구조의 동작을 정의합니다.
구현(Implement)
LinkedList 클래스는 Queue 인터페이스를 구현한다. 즉, Queue 인터페이스에 정의된 메서드를 LinkedList 클래스가 실제로 동작하도록 작성한 것이다.
객체 생성
LinkedList 클래스의 인스턴스를 생성하고, 이를 Queue 타입의 변수 myQueue에 할당한다.
'IT > Algorithm | Coding Test' 카테고리의 다른 글
| [백준 11720] [Java] 숫자의 합 (0) | 2025.01.14 |
|---|---|
| 배열, 리스트 (Java) (0) | 2025.01.14 |
| 스택 Stack, 큐 Queue, 덱 Deque (1) | 2025.01.05 |
| Stream vs IntStream (0) | 2025.01.04 |
| [백준 1158] [Java] 요세푸스 문제 (1) | 2025.01.02 |