ArrayList를 통해 Queue를 구현해서 풀어보았다
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class PrinterQueue {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 테스트 케이스 값 입력
int testcase = Integer.parseInt(br.readLine());
StringBuilder sb = new StringBuilder();
StringTokenizer st;
//테스트케이스 횟수만큼 실행
for(int i=0; i<testcase; i++) {
// 6 0
st = new StringTokenizer(br.readLine(), " ");
// 6
int size = Integer.parseInt(st.nextToken());
// 0
int findIndex = Integer.parseInt(st.nextToken());
ArrayList<Integer[]> list = new ArrayList<Integer[]>();
st = new StringTokenizer(br.readLine(), " ");
for(int j=0; j<size; j++) {
Integer[] arr = new Integer[2];
// index값 저장
arr[0] = j;
// value값 저장
arr[1] = Integer.parseInt(st.nextToken());
list.add(arr);
}
int count = 0;
while(true) {
int maxValue = 0;
int maxIndex = -1;
// maxValue 를 통해 값을 비교하고 maxIndex 를 찾는다
// 만약 남은 값들이 다 똑같다면 ( 1 1 1 1 1 )
// maxIndex = 0일 것이다.
for(int j =0; j<list.size(); j++) {
if(maxValue < list.get(j)[1]) {
maxValue = list.get(j)[1];
maxIndex = j;
}
}
// maxIndex 앞의 값들은 제거하고 다시 맨 뒤로 넣어준다
// maxIndex = 0 일 경우 미실행
for(int j=0; j<maxIndex; j++) {
list.add(list.remove(0));
}
// list의 맨 앞 index가 찾고자하는 index가 아니라면
// count++ 해주고 제거
if(list.get(0)[0] != findIndex) {
count++;
list.remove(0);
}
// list의 맨 앞 index가 찾고자하는 index가 맞다면
// count++ 해주고, StringBuilder에 추가
else {
count++;
sb.append(count).append("\n");
break;
}
}
}
br.close();
System.out.println(sb);
}
}
반응형
'Java > 알고리즘' 카테고리의 다른 글
[Java] 프로그래머스 [PCCP 기출문제] 1번 / 붕대 감기 (0) | 2024.09.27 |
---|---|
[Java] 프로그래머스 [PCCE 기출문제] 10번 / 공원 (0) | 2024.09.24 |
[Java] 백준-11047 동전 0 (그리디 알고리즘) (0) | 2022.10.20 |
[Java] 백준-1764 듣보잡 (0) | 2022.10.20 |
[Java] 백준-1620 나는야 포켓몬 마스터 이다솜 (0) | 2022.10.20 |
댓글