✏️ 수 정렬하기 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 |