문제
내가 작성한 정답
class Solution {
public int solution(int[] numbers, int k) {
return numbers[(2*(k-1))%numbers.length];
}
}
다른 사람들의 정답
class Solution {
public int solution(int[] numbers, int k) {
return (k-1)*2 % numbers.length+1;
}
}
Queue 이용
import java.util.*;
class Solution {
public int solution(int[] numbers, int k) {
int answer = 0;
Queue<Integer> queue = new LinkedList<>();
for(int num : numbers) queue.add(num);
int cnt = 1;
// queue.poll()은 큐의 맨 앞 요소를 제거하고 반환.
// queue.add(queue.poll())는 이 요소를 큐의 맨 뒤로 이동시킴.
// 두 번의 poll()을 통해 두 개의 요소를 큐의 뒤로 이동시키고, cnt를 증가시킨다.
while(cnt!=k){
queue.add(queue.poll());
queue.add(queue.poll());
cnt++;
}
answer = queue.poll();
return answer;
}
}
Queue
Java에서 Queue 인터페이스는 Java Collections Framework의 일부로, 큐 데이터 구조를 구현하는 데 사용된다. Queue는 FIFO(First In, First Out) 원칙을 따르며, 다양한 큐 구현체가 제공된다. 가장 일반적으로 사용되는 구현체는 LinkedList, ArrayDeque, PriorityQueue 등이다.
- Queue 인터페이스의 주요 메서드
- add(E e): 큐의 맨 뒤에 요소를 추가한다. 큐가 가득 차면 IllegalStateException을 발생시킨다.
- offer(E e): 큐의 맨 뒤에 요소를 추가한다. 큐가 가득 차면 false를 반환한다.
- remove(): 큐의 맨 앞 요소를 제거하고 반환한다. 큐가 비어 있다면 NoSuchElementException을 발생시킨다.
- poll(): 큐의 맨 앞 요소를 제거하고 반환합니다. 큐가 비어 있으면 null을 반환합니다.
- peek(): 큐의 맨 앞 요소를 반환하지만 제거하지 않습니다. 큐가 비어 있으면 null을 반환합니다.isEmpty(): 큐가 비어 있는지를 확인합니다.
- LinkedList : 이중 연결 리스트로 구현된 자료구조로, 요소의 삽입과 삭제가 빠르며, 임의 접근은 느림. List, Queue, Deque 인터페이스를 구현함.
- ArrayDeque: 동적 배열을 기반으로 한 큐로, 스택과 큐 모두로 사용할 수 있습니다. 성능이 뛰어나고, null 요소를 허용하지 않습니다.
- PriorityQueue: 우선순위 큐로, 요소가 자연 순서 또는 제공된 비교자에 따라 정렬됩니다. FIFO가 아닌 우선순위에 따라 요소가 제거됩니다.
Share article