프론트엔드 개발자의 기록 공간

[백준 node.js] 1138번_한 줄로 서기 본문

알고리즘_JS/백준_Greedy

[백준 node.js] 1138번_한 줄로 서기

[리우] 2020. 12. 26. 01:18

백준 그리디 알고리즘 1138번_한 줄로 서기

난이도 : 실버II

 

문제 설명

입출력

 

문제 해설 : 이 문제의 핵심은 입력으로 주어지는 순서가 "키의 순서"이다. 그리고 해당 값이 왼쪽에 몇명있는지를 나타내는 숫자이다. 즉 입력예제 2 1 1 0은  키1인 사람의 왼쪽에는 자신보다 큰 두명이 있고

키 2인 사람의 왼쪽에는 자신보다 큰 한명이있고 키3인 사람의 왼쪽에는 자신보다 큰 한명이 있고 키 4인 사람은 자신보다 큰 왼쪽의 사람은 0명이 있다는 의미이다.

 

// 실버2 한 줄로 서기
function solution(n, list) {

    let result = new Array(n).fill(0);
    //i는 키 순서를 의미(1부터~)
    for(let i=1; i<n+1; i++){
        //왼쪽에 몇명이 있는지 저장하는 변수
        let tmp = list[i-1];
        let count = 0;

        //j는 배열 인덱스를 의미
        for(let j=0; j<n; j++){
            //왼쪽에 있는 변수와 카운트가 일치하고 빈 배열이면 삽입
            if(count === tmp && result[j] === 0){
                result[j] = i;
                break;
            }
            //result배열이 비어있을때만 카운트(이미 있는값들은 무시)
            else if(result[j] === 0){
                count += 1;
            }
        }
    }
    //배열 요소를 줄바꿈 없이 하나씩 출력하기 위해 join사용
    let r = result.join(" ")
    console.log(r);
}

const readline = require("readline");
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout,
});

let input = [];
rl.on("line", function (line) {
    //여러줄 입력
    input.push(line)
}).on("close", function () {
    //n명
    let n = parseInt(input[0]);

    //띄어쓰기 기준으로 배열에 넣기
    let list = input[1].split(' ').map((el) => parseInt(el));
    solution(n, list);
    process.exit();
});

* 배열의 요소를 줄바꿈없이 출력할려면 JS에서는 join함수를 이용하면 해결할 수 있다.

728x90
Comments