현재 제일 먼저 나와야하는 가장 큰 값을 first로 두고, 제일 앞에 있는 값을 now로 둔 뒤 몇 번째로 인쇄되는지 궁금한 것의 위치인 m을 1 빼주고, first와 now가 같다면 cnt++, 다르다면 arr에 push하고 arr.length만큼 m에 더하는 식으로 구현했다.
let fs = require('fs');
const inputs = fs.readFileSync('/dev/stdin').toString().trim().split('\n');
//const inputs = fs.readFileSync(__dirname+'/ex2.txt').toString().split('\n');
const k = Number(inputs[0]);
for (let i=1; i < k*2; i+=2){
let [n, m] = inputs[i].split(' ').map(Number);
let arr = inputs[i+1].split(' ').map(Number);
if (n === 1 && m === 0) {
console.log(1);
}
else {
let cnt = 0; //몇번째인지 count
while (true) {
let first = Math.max(...arr);
let now = arr.shift();
m--;
if (now === first) { //최대와 현재 맨처음애가 같으면
cnt+=1;
if (m < 0) {
break;
}
}
else { // 아니면 배열 다시 넣기
arr.push(now)
if (m<0){
m+=arr.length;
}
}
}
console.log(cnt);
}
}
자바스크립트의 Math.max()에 배열을 넣으면 안되고 위와 같이 전개해서 넣어야한다는 걸 새롭게 알게 되었다.
from collections import deque
import sys
n = int(sys.stdin.readline().strip())
for _ in range(n):
k, m = map(int, sys.stdin.readline().split())
l1=deque(list(map(int, sys.stdin.readline().strip().split())))
if k==1 and m==0:
print(1)
else:
cnt=0
while True:
first=max(l1)
now=l1.popleft()
m-=1
if now==first:
cnt+=1
if m<0:
break
else:
l1.append(now)
if m<0:
m+=len(l1)
print(cnt)