5
ABCD
145C
A
A910
Z321
A
ABCD
Z321
145C
A910
reduce메소드를 사용하여 합치고 비교한다.NaN으로 return되기 때문에 NaN일 경우 0으로 리턴해준다.charCodeAt(0)메소드로 아스키 코드를 비교하고, 각 자리의 값이 다르면 비교하여 return한다.const fs = require("fs");
const input = fs.readFileSync("./dev/stdin").toString().trim().split("\n");
input.shift();
let arr = input.sort((a, b) => {
if (a.length === b.length) { //2
let A = a
.split("")
.map((item) => {
return !isNaN(Number(item)) ? Number(item) : 0; // 3
})
.reduce((a, b) => a + b);
let B = b
.split("")
.map((item) => {
return !isNaN(Number(item)) ? Number(item) : 0;
})
.reduce((a, b) => a + b);
if (A === B) { // 4
for (let i = 0; i < a.length; i++) {
if (a[i] !== b[i]) return a.charCodeAt(i) - b.charCodeAt(i);
}
} else {
return A - B;
}
} else { // 1
return a.length - b.length;
}
});
console.log(arr.join("\n").trim());
baekjoon
aekjoon
baekjoon
ekjoon
joon
kjoon
n
on
oon
sort메소드를 통해 정렬한다. sort메소드는 따로 compare함수를 작성해주지 않을 때, 아스키코드 기준으로 오름차순 정렬을 해준다.const fs = require("fs");
const input = fs.readFileSync("./dev/stdin").toString().trim().split("");
let ans = [];
ans = input
.map((_, idx) => {
return input.slice(idx).join("");
})
.sort();
console.log(ans.join("\n"));
5
1
2
3
4
5
5
4
3
2
1
const fs = require("fs");
const input = fs.readFileSync("./dev/stdin").toString().trim().split("\n");
input.shift();
console.log(input.sort((a, b) => Number(b) - Number(a)).join("\n"));
온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어진다. 이때, 회원들을 나이가 증가하는 순으로, 나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬하는 프로그램을 작성하시오.
3
21 Junkyu
21 Dohyun
20 Sunyoung
20 Sunyoung
21 Junkyu
21 Dohyun
const fs = require("fs");
const input = fs.readFileSync("./dev/stdin").toString().trim().split("\n");
input.shift();
let arr = input.map((item) => {
item = item.split(" ");
return [Number(item[0]), item[1]];
});
console.log(
arr
.sort((a, b) => a[0] - b[0])
.join("\n")
.replaceAll(",", " ")
.trim()
);
2차원 평면 위의 점 N개가 주어진다. 좌표를 y좌표가 증가하는 순으로, y좌표가 같으면 x좌표가 증가하는 순서로 정렬한 다음 출력하는 프로그램을 작성하시오.
5
0 4
1 2
1 -1
2 2
3 3
1 -1
1 2
2 2
3 3
0 4
const fs = require("fs");
const input = fs.readFileSync("./dev/stdin").toString().trim().split("\n");
const leng = Number(input.shift());
let arr = input.map((item) => {
let arr = item.split(" ");
return [Number(arr[0]), Number(arr[1])];
});
console.log(
arr
.sort((a, b) => {
// 같았을 때, x 다른 때, y를 비교
return a[1] === b[1] ? a[0] - b[0] : a[1] - b[1];
})
.join("\n")
.replaceAll(",", " ")
.trim()
);
N명의 학생들을 키 순서대로 줄을 세우기 위해, 일부 학생들의 키를 비교한 결과를 주어졌을 때 줄을 세우는 프로그램을 작성하시오.
3 2
1 3
2 3
1 2 3
const fs = require("fs");
const input = fs
.readFileSync("dev/stdin")
.toString()
.trim()
.split("\n")
.map((item) => item.split(" "));
const shift = input.shift().map(Number);
let indegree = Array.from({ length: shift[0] }, () => []);
let countArr = Array(Number(shift[0])).fill(0);
let ans = [];
function answersort() {
let quene = [];
countArr.map((item, idx) => {
return item === 0 ? quene.push(idx + 1) : null;
});
while (quene.length) {
let zero = quene.shift();
indegree[zero - 1].forEach((item) => {
countArr[item - 1]--;
countArr[item - 1] === 0 ? quene.push(item) : null;
});
ans.push(zero);
}
}
for (let i = 0; i < input.length; i++) {
indegree[Number(input[i][0]) - 1].push(Number(input[i][1]));
countArr[Number(input[i][1]) - 1]++;
}
answersort();
console.log(ans.join(" "));
);
보조 PD 세 명에게 각자 담당한 가수의 출연 순서를 모두 받아, 세 보조 PD가 정해온 순서를 만족할 수 있는 순서를 정하시오.
3 2
1 3
2 3
1 2 3
const fs = require("fs");
const input = fs
.readFileSync("./dev/stdin")
.toString()
.trim()
.split("\n")
.map((item) => item.split(" "));
const shift = input.shift().map(Number);
if (shift[1] === 0 || shift[0] === 0) return console.log(0);
let indegree = Array.from({ length: shift[0] }, () => []);
let countArr = Array(shift[0]).fill(0);
let ans = [];
function answersort() {
let quene = [];
countArr.map((item, idx) => {
return item === 0 ? quene.push(idx + 1) : null;
});
while (quene.length) {
let zero = quene.shift();
indegree[zero - 1].forEach((item) => {
countArr[item - 1]--;
countArr[item - 1] === 0 ? quene.push(item) : null;
});
ans.push(zero);
}
}
for (let i = 0; i < input.length; i++) {
input[i].shift();
for (let j = 0; j < input[i].length - 1; j++) {
indegree[Number(input[i][j]) - 1].push(Number(input[i][j + 1]));
countArr[Number(input[i][j + 1]) - 1]++;
}
}
answersort();
if (Math.max(...countArr) === 0) console.log(ans.join(" "));
else console.log(0);