Computer Science/알고리즘

[Node.js] 백준 실버5 2751 수 정렬하기2

mj73 2023. 5. 11. 10:09

https://www.acmicpc.net/problem/2751

 

2751번: 수 정렬하기 2

첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 절댓값이 1,000,000보다 작거나 같은 정수이다. 수는 중복되지 않는다.

www.acmicpc.net

 

 

0. 시도

처음 풀었던 방법으로는 버블정렬 알고리즘을 이용하였는데 이렇게 하니까 시간 초과 에러가 났다.

버블 정렬 쓴 코드는 아래와 같다.. temp라는 변수를 하나 만들어서 swip 하는 방식으로 버블 정렬을 사용했다.

const fs = require('fs')
const filePath = process.platform === 'linux' ? '/dev/stdin' : './예제.txt';
const input = fs.readFileSync(filePath).toString().trim().split("\n");

const N = input.shift();

let temp = 0;
for(let i=0; i<N; i++){
    for(let j=0; j<N-1; j++){
        if(input[j] > input[j+1]){
            temp = input[j];
            input[j] = input[j+1];
            input[j+1] = temp;
        }
    }
}
for(let i=0; i<N; i++){
    console.log(`${input[i]}\n`);
}

 

 

1. 풀이

sort(), join()이라는 내장함수를 사용하였다. sort()로 쉽게 정렬할 수 있었고, 출력할 때는 join('\n')을 하여 한 줄씩 출력할 수 있었다.

const fs = require('fs')
const filePath = process.platform === 'linux' ? '/dev/stdin' : './예제.txt';
const input = fs.readFileSync(filePath).toString().trim().split("\n");

const N = input.shift();
const result = input.sort((a, b) => a - b);
console.log(result.join('\n'));

 

 

2. 어려웠던 점

출력 형식에 맞지 않는다는 에러 때문에 30분은 이것저것 하면서 시도해 본 것 같다.

기존에 있던 3번째 줄에서 trim()을 쓰지 않아서 났던 에러였다.

수정하니까 문제를 맞출 수 있었다~

const input = fs.readFileSync(filePath).toString().split("\n"); //이전 코드
const input = fs.readFileSync(filePath).toString().trim().split("\n"); //수정한 코드