FIFO(First-In, First-Out) 자료구조
Queue< DataType > q = new LinkedList<>();
로 선언할 수 있다.
주요 method:
1) .offer(x) : Queue안에 x값을 삽입.
2) .poll() : 가장 맨 앞의 값을 내보내고 return.
3) .contains(x) : Queue안에 x 값이 존재하는지 확인.
4) .peek() : 가장 먼저 들어간값(맨 앞의 값).
ㅡ ㅡ ㅡ ㅡ ㅡ ㅡ ㅡ ㅡ
<- 1 2 3 4 5 6 7 8 < -
ㅡ ㅡ ㅡ ㅡ ㅡ ㅡ ㅡ ㅡ
1~8순서로 값을 넣었을때(offer) 해당 형태로 값이 생성된다.
queue.poll()을 하게되면 1부터 값이 사라진다.
queue.peek() = 1이다.
import java.util.*;
class Main {
public int solution(int n, int k) {
int answer = 0;
Queue<Integer> q = new LinkedList<>();
for(int i=1; i<=n; i++) q.offer(i);
while(q.size()>1) { // 또는 !q.isEmpty()
for(int i=0; i<=k-1;i++) {
if(i==k-1) q.poll();
else q.offer(q.poll());
}
}
answer = q.element();
return answer;
}
public static void main(String[] args) {
Main T = new Main();
Scanner kb = new Scanner(System.in);
int n = kb.nextInt();
int k = kb.nextInt();
System.out.println(T.solution(n,k));
}
}
public int solution(int n, int k) {
int answer = 0;
Queue<Integer> q = new LinkedList<>();
for(int i=1; i<=n; i++) q.offer(i);
while(!q.isEmpty()) {
for(int i=1; i<k;i++) q.offer(q.poll());
q.poll();
if(q.size() == 1) answer = q.poll();
}
return answer;
}
if문을 통해 여러 케이스를 다루기보단,
조금만 더 생각해서 쉽게 나타낼수 있는 방법을 고려하자...
그리고 Queue 자료구조를 더 공부하자!