https://www.acmicpc.net/problem/1966
const input = require("fs").readFileSync("/dev/stdin").toString().trim().split("\n");
const [n, ...testcases] = input;
var numbers = [];
for (let i = 0; i < n; i++) {
var count = 1;
let location = Number(testcases[i * 2].split(' ')[1])
let queue = testcases[i * 2 + 1].split(' ').map(Number);
while (true) {
const Item = queue.shift();
if (Math.max(...queue) <= Item && location === 0) {
console.log(count);
break;
} else if (Math.max(...queue) > Item && location === 0) {
queue.push(Item);
location = queue.length - 1;
} else if (Math.max(...queue) > Item) {
queue.push(Item);
location -= 1;
} else if (Math.max(...queue) <= Item) {
count += 1;
location -= 1;
}
}
}
문제를 읽고 조건문을 작성하는데 많은 어려움을 겪어서 구글링을 통해 이해한 후 다시 풀어보았다.
출력되는 순서를 알고싶은 위치를 저장하기 위해 location 변수에 알고자하는 숫자의 위치를 기록해둔다.
맨 앞의 숫자를 판별하기 위해 shift를 사용하여 Item에 저장해주었다.
그 후 if-else 구문을 통해
현재 Item이 우선순위가 가장 높은 숫자이고 location(출력되는 순서를 알고싶은 숫자의 위치) 가 0(맨앞) 이라면 count를 출력해주고 반복문을 끝낸다.
현재 Item이 우선순위가 가장 큰 수가 아니고 location 이 0이라면 맨 뒤로 보내주고(push) location 또한 맨 마지막으로 재설정 해준다.
현재 Item이 우선순위가 가장 큰 수가 아니면 맨 뒤로 보내준다. location -1
현재 Item이 우선순위가 가장 큰 수이면 출력을 하기 때문에 count를 늘려주고 location 또한 -1 을 해준다.