BOJ 1966

슬기로운 FE 세상·2022년 3월 28일
0

const stdin = process.platform === 'linux' 
? require('fs').readFileSync('/dev/stdin')
: `3
1 0
5
4 2
1 2 3 4
6 0
1 1 9 1 1 1`;

const input = stdin.toString().trim().split("\n");
const N = Number(input[0])
let arr = [];

for(let i=1; i<N * 2; i+=2) {
    input[i] = input[i].split(' ');
    let n = +input[i][0];
    let m = +input[i][1];

    let best = input[i+1].split(' ').map(Number);
    let queue = best.map((v, i) => [i, v]) // i는 idx번호
    
    best.sort((a,b) => b-a); // 정렬 후 값
    
    let cnt = 0;
    while(queue.length > 0) {
        let idx = queue[0][0];
        let val = queue[0][1];
        queue.shift();

        if(val < best[cnt]) {
            queue.push([idx, val])
        } else {
            cnt++;
            if(idx === m) break;
        }
    }
    arr.push(cnt);
}

console.log(arr.join('\n'));

최선의 배열을 idx와 함께 만들어놓고, 기존 배열되지 않은 값과 배열이 된 값을 비교하여 최선의 값이 더 크면 idx,value를 shift한 것을 뒤에 push해주고 그게 아니라면(val 값과 최선의 값의 값이 같다면) cnt++를 해준다. 최선의 배열의 idx값을 의미한다. 여기서 최선의 값의 idx와 구하고자 하는 값의 idx가 같으면 cnt를 출력하여 위치를 알아낸다.

profile
자 드가자~~

0개의 댓글

관련 채용 정보