본문 바로가기

코딩테스트

JS 정렬 문제

✏️ 수 정렬하기 2 https://www.acmicpc.net/problem/2751

 

2751번: 수 정렬하기 2

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

www.acmicpc.net

let fs = require('fs');
let input = fs.readFileSync('/dev/stdin').toString().split('\n');
let cnt = Number(input[0]);
let arr = [];

for (let i=1; i<=cnt; i++){
    arr.push(Number(input[i]));    
}

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

let result = "";
for (let i=0; i<arr.length; i++){
    result += arr[i] + "\n";
}
console.log(result);

✏️ 좌표 정렬하기 https://www.acmicpc.net/problem/11650

 

11650번: 좌표 정렬하기

첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다.

www.acmicpc.net

let fs = require('fs');
let input = fs.readFileSync('/dev/stdin').toString().split('\n');
let n = Number(input[0]);
let arr = [];

// 배열 형태로 x,y값 입력
for(let i=1; i<=n; i++){
    arr.push(input[i].split(' ').map(Number));
}

// 정렬
arr.sort(function (a, b){
    if(a[0] == b[0]){	 	// x값이 같을 경우 y를 기준으로 정렬
        return a[1]-b[1];
    } else {
        return a[0]-b[0];  
    }
})

let result = "";
for (let i=0; i<arr.length; i++){
    result += arr[i][0] + " " + arr[i][1] + "\n";
}

console.log(result);

 

✏️ 단어 정렬 https://www.acmicpc.net/problem/1181

 

1181번: 단어 정렬

첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다.

www.acmicpc.net

let fs = require('fs');
let input = fs.readFileSync('/dev/stdin').toString().split('\n');
let n = input[0];
let arr = [];

// 원소 입력
for (let i=1; i<=n; i++){
    arr.push(input[i]);
}

// 중복문자제거
arr = [...new Set(arr)];

// 길이 기준으로 정렬하되, 길이가 같으면 문자열 기준 정렬
arr.sort(function(a, b){
    if (a.length == b.length) {
        if(a<b) return -1;
        else if (a>b) return 1;
        else return 0;
    } else {
        return a.length-b.length;
    }
})

for (let x of arr){
    console.log(x);
}

✏️ 좌표 압축 https://www.acmicpc.net/problem/18870

 

18870번: 좌표 압축

수직선 위에 N개의 좌표 X1, X2, ..., XN이 있다. 이 좌표에 좌표 압축을 적용하려고 한다. Xi를 좌표 압축한 결과 X'i의 값은 Xi > Xj를 만족하는 서로 다른 좌표의 개수와 같아야 한다. X1, X2, ..., XN에 좌

www.acmicpc.net

let fs = require('fs');
let input = fs.readFileSync('/dev/stdin').toString().split('\n');
let n = Number(input[0]);
let arr = input[1].split(' ').map(Number);
let setArr = [...new Set(arr)];

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

// 원래는 Map을 사용하지 않고 정렬된 setArr에서 indexOf로 뽑아도 되겠다 생각했는데 시간이 초과된다.
let myMap = new Map();
for(let i=0; i<setArr.length; i++){
    myMap.set(setArr[i], i);
}

result = "";

for (let x of arr){
    result += myMap.get(x) +" ";
}

console.log(result);

 

✏️ 나이순 정렬 https://www.acmicpc.net/problem/10814

 

10814번: 나이순 정렬

온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어진다. 이때, 회원들을 나이가 증가하는 순으로, 나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬하는 프로그램을

www.acmicpc.net

let fs = require('fs');
let input = fs.readFileSync('/dev/stdin').toString().split('\n');
let n = Number(input[0]);
let arr = [];

// info에는 나이[0], 이름[1] 정보가 들어있음
for(let i=1; i<=n; i++){
    let info = input[i].split(' ');
    arr.push([Number(info[0]),info[1]]);
}

// Node.js 정렬은 기본적으로 stable
// 나이순 정렬만 해주면 들어온 순서대로 정렬 보장
arr.sort(function(a, b){
    return a[0] - b[0];
})

result = "";
for (let x of arr){
    result += x[0] + ' ' + x[1] + '\n';
}

console.log(result);

'코딩테스트' 카테고리의 다른 글

JS 탐욕(Greedy) 알고리즘 심화 34  (0) 2023.06.01
JS 탐욕(Greedy) 알고리즘 기초 12  (0) 2023.05.30
코딩테스트를 위한 정렬  (0) 2023.05.25
코딩테스트를 위한 자료구조  (0) 2023.05.24
JS 문자열 문제  (0) 2023.05.24