코딩테스트 문제풀이/programmers

goorm nodejs - 숫자 제거 정렬

sangchu 2024. 6. 15. 12:33

문제

링크

문제 풀이

const readline = require('readline');

(async () => {
    let rl = readline.createInterface({ input: process.stdin });
    
    let input = [];
    for await (const line of rl) {
        input.push(line.trim());
        if (input.length == 2) {
            rl.close();
        }
    }
    
    const N = input[0];
    let numbers = new Set(input[1].split(' ').map(Number));
    numbers = [...numbers];
    numbers.sort((a, b) => a - b);
    console.log(...numbers);
    
    process.exit();
})();

입력으로 받아온 것을 차례대로(한 줄마다) input에 넣는다.

입력을 두줄 받아야하므로 input.length가 2이면 rl.close()을 호출하여 입력 스트림을 닫는다.

입력은 모두 문자열로 변환돼서 저장이 된다.

 

그 후부터는 다른 플랫폼처럼 코드를 작성하면 된다. 

조건에 맞게 오름차순으로 정렬하고, 중복된걸 제거하기위해 Set을 썼다.

 

코드 개선 - 입력, 출력 분리

const readline = require('readline');

// 입력을 처리하는 함수
async function processInput() {
    const rl = readline.createInterface({ input: process.stdin });
    let input = [];
    
    for await (const line of rl) {
        input.push(line.trim());
        if (input.length == 2) {
            rl.close();
        }
    }
    
    return input;
}

// 데이터를 처리하는 함수
function processData(input) {
    const N = input[0];
    let numbers = new Set(input[1].split(' ').map(Number));
    numbers = [...numbers];
    numbers.sort((a, b) => a - b);
    console.log(...numbers);
}

// 메인 함수
(async () => {
    const input = await processInput();
    processData(input);
    process.exit();
})();

처음 코드는 입출력이 하나로 묶여있는데 역할을 분리하는게 좋을 것 같아서 분리를 해봤다.