https://www.acmicpc.net/problem/1755
문제
79를 영어로 읽되 숫자 단위로 하나씩 읽는다면 "seven nine"이 된다. 80은 마찬가지로 "eight zero"라고 읽는다. 79는 80보다 작지만, 영어로 숫자 하나씩 읽는다면 "eight zero"가 "seven nine"보다 사전순으로 먼저 온다.
문제는 정수 M, N(1 ≤ M ≤ N ≤ 99)이 주어지면 M 이상 N 이하의 정수를 숫자 하나씩 읽었을 때를 기준으로 사전순으로 정렬하여 출력하는 것이다.
입력
첫째 줄에 M과 N이 주어진다.
출력
M 이상 N 이하의 정수를 문제 조건에 맞게 정렬하여 한 줄에 10개씩 출력한다.
예제 입력 1 복사
8 28
예제 출력 1 복사
8 9 18 15 14 19 11 17 16 13
12 10 28 25 24 21 27 26 23 22
20
문제풀이(1)
1. 영어와 숫자가 일치하는 객체를 생성한다.
2. 최대 2자리수까지 있는 숫자들을 한글자씩 영어로 변경하는 로직을 구현한다.
3. 각 자리수를 영어를 기준으로 정렬해준다.
4. 정렬하여 맞는 숫자를 출력한다. 이때, 10개씩 끊어서 출력한다.
const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt";
const [M, N] = require("fs").readFileSync(filePath).toString().trim().split(" ").map(Number);
const dictionary = {
1: "one",
2: "two",
3: "three",
4: "four",
5: "five",
6: "six",
7: "seven",
8: "eight",
9: "nine",
0: "zero",
};
const changeResult = [];
let answer = "";
const NumberToString = (number) => {
const str = String(number);
const temp = [];
temp.push(number);
for (let i = 0; i < str.length; i++) {
temp.push(dictionary[str[i]]);
}
return temp;
};
for (let i = M; i <= N; i++) {
changeResult.push(NumberToString(i));
}
changeResult.sort((a, b) => {
if (a[1] > b[1]) return 1;
if (a[1] < b[1]) return -1;
if (a[2] > b[2]) return 1;
if (a[2] < b[2]) return -1;
});
changeResult.forEach((value, idx) => {
answer += `${value[0]} `;
if ((idx + 1) % 10 === 0) {
answer.trim();
answer += "\n";
}
});
console.log(answer);
'Algorithm' 카테고리의 다른 글
[Baekjoon]14495번 피보나치 비스무리한 수열 - Javascript (1) | 2024.01.10 |
---|---|
[Baekjoon]15624번 피보나치 수 7 - Javascript (0) | 2024.01.10 |
[Baekjoon]13699번 점화식 - Javascript (0) | 2024.01.09 |
[Baekjoon]1822번 차집합 - Javascript (1) | 2024.01.08 |
[Baekjoon]11508번 2+1 세일 - Javascript (1) | 2024.01.08 |