알고리즘/백준

[백준] js 2752

프흐프좋아 2024. 2. 9. 22:20

sort함수는 정렬 기준을 지정하지 않을 경우 기본적으로 

각 요소를 문자열로 변환하고 유니코드 코드 포인트 순서에 따라 정렬한다

이는 숫자를 정렬할 때 우리가 일반적으로 기대하는 방식과 다를 수 있다....

 

그러니까 [ 1, 2, 3 ] 배열을 arr.sort()로 그냥 돌리면 이때는 문제가 없지만

let arr = [10, 5, 20, 2]; 와 같은 배열을 arr.sort() 함수로 돌리게 되면

[ 10, 2, 20, 5 ] 와 같은 결과를 받아버릴 수 있다

따라서 숫자를 js의 sort함수로 내림차순이나 오름차순을 할 경우에는, 꼭 compare함수를 정의해주어야 한다

 

arr.sort()돌렸다가 열심히 삽질함..

 

// readline 모듈보다는 fs를 이용해 파일 전체를 읽어 들여 처리하기
const fs = require('fs')

const getInput = (filePath) => {
    return fs
        .readFileSync(filePath)
        .toString()
        .split(/\n/);
    }

const input = getInput('test.txt'); // 제출시 여기 '/dev/stdin' 으로 변경
let arr = input[0].split(' ').map(Number);

arr.sort(function(a,b){
    return a-b;
});

let answer = "";
for(let i=0;i<arr.length;i++)
{
    answer += arr[i] + "a";
}

console.log(answer);

 

이렇게도 가능

// readline 모듈보다는 fs를 이용해 파일 전체를 읽어 들여 처리하기
const fs = require('fs')

const getInput = (filePath) => {
    return fs
        .readFileSync(filePath)
        .toString()
        .split(/\n/);
    }

const input = getInput('test.txt'); // 제출시 여기 '/dev/stdin' 으로 변경
let arr = input[0].split(' ').map(Number);

arr.sort(function(a,b){
    if(a>b) return 1;
    else if(a<b) return -1;
    else return 0;
});

let answer = "";
for(let i=0;i<arr.length;i++)
{
    answer += arr[i] + " ";
}

console.log(answer);