세 개의 숫자를 입력 받고 오름차순으로 정렬하여 출력하는 문제이다.
간단하게 입력 모듈을 설정하고 공백을 기준으로 배열 형태로 만든 뒤, sort
함수를 통해 정렬 후 출력해주면 된다.
let fs = require('fs');
let input = fs.readFileSync('/dev/stdin').toString().split('\n');
let arr = input[0].split(' ');
arr.sort((a, b) => Number(a) - Number(b));
console.log(`${arr[0]} ${arr[1]} ${arr[2]}`) //세수정렬
위 문제와 비슷하지만 입력 형태와 출력 형태가 다르기 때문에 편하게 sort
함수를 통해 정렬하여 형식에 맞게 출력하였다.
let fs2 = require('fs');
let input2 = fs2.readFileSync('/dev/stdin').toString().split('\n');
let n = parseInt(input2[0]);
let arr3 = [];
for(let i = 1; i <= n; i++)
arr3.push(parseInt(input2[i]));
arr3.sort((a, b) => Number(b) - Number(a));
console.log(arr3.join('\n')); // 수 정렬하기 4
입력으로 주어진 숫자 배열에 대한 정렬을 진행하고 K로 주어진 인덱스를 출력하면 되는 문제다.
let fs2 = require('fs');
let input2 = fs2.readFileSync('/dev/stdin').toString().split('\n');
let [n, k] = input2[0].split(' ').map(Number);
let arr = input2[1].split(' ').map(Number);
arr.sort((a, b) => Number(a) - Number(b));
console.log(arr[k - 1]); // k번째 수
sort
함수의 매개변수인 콜백함수를 만들면 간단하게 풀 수 있는 문제이다.
입력 모듈과 input
함수를 적절히 분리하여 정렬할 데이터와 아닌 것을 분리하고, 조건에 맞게 정렬하는 함수를 작성하여 콜백하고 출력 조건에 맞게 출력한다.
let fs = require('fs');
let input = fs.readFileSync('/dev/stdin').toString().split('\n');
let N = Number(input[0]);
function sorted(a, b)
{
let [a1, a2] = a.split(' ').map(Number);
let [b1, b2] = b.split(' ').map(Number);
let c1 = a1 - b1;
if (c1 != 0)
return c1;
let c2 = a2 - b2;
return c2;
}
let arr = [];
for (let i = 1; i <= N; i++)
{
arr.push(input[i]);
}
arr.sort(sorted);
console.log(arr.join('\n'));
위 문제와 유사하지만 콜백 함수의 정렬 조건의 우선 순위를 x
에서 y
변경하고 정렬해주면 된다.
let fs = require('fs');
let input = fs.readFileSync('/dev/stdin').toString().split('\n');
let N = Number(input[0]);
function sorted(a, b)
{
let [a1, a2] = a.split(' ').map(Number);
let [b1, b2] = b.split(' ').map(Number);
let c2 = a2 - b2;
if (c2 != 0)
return c2;
let c1 = a1 - b1;
return c1;
}
let arr = [];
for (let i = 1; i <= N; i++)
{
arr.push(input[i]);
}
arr.sort(sorted);
console.log(arr.join('\n'));
단어를 입력 받아서 배열로 push
후 중복 제거한 후 길이 순으로 정렬, 길이가 같다면 사전 순으로 정렬하는 콜백 함수를 만들어 정렬해주면 된다.
여기서 가장 중요한 것은
set
을 통해 중복을 제거하는 것인데 제거 후 정렬을 해야하기 때문에 배열로 다시 변환해야한다.
javascript에서는 편하게 arr = [...new Set(arr)]
한 문장으로 Set의 인스턴스에 arr의 요소를 넣어 중복을 제거한 후 다시 [...]
를 통해 변환할 수 있었다.
let fs = require('fs');
let input = fs.readFileSync('/dev/stdin').toString().split('\n');
let N = Number(input[0]);
function sorted(a, b)
{
if (a.length != b.length)
return a.length - b.length;
if (a < b)
return -1;
if (a > b)
return 1;
return 0;
}
let arr = [];
for (let i = 1; i <= N; i++)
{
arr.push(input[i]);
}
arr = [...new Set(arr)];
arr.sort(sorted);
console.log(arr.join('\n'));