티스토리 뷰
https://www.acmicpc.net/problem/10610
10610번: 30
어느 날, 미르코는 우연히 길거리에서 양수 N을 보았다. 미르코는 30이란 수를 존경하기 때문에, 그는 길거리에서 찾은 수에 포함된 숫자들을 섞어 30의 배수가 되는 가장 큰 수를 만들고 싶어한
www.acmicpc.net
🤔 해결방법
1. 0이 들어있지 않거나 모든 자리수의 합이 3의 배수가 아니면 -1을 출력한다.
2. 그렇지 않으면 숫자를 내림차순으로 정렬하여 출력한다.
🔑 풀이
const input = require("fs")
.readFileSync("/dev/stdin")
.toString()
.trim()
.split("\n");
const number = input[0];
const numberSplit = number.split("");
//모든 자리수의 합
let sum = 0;
for (let i = 0; i < numberSplit.length; i++) {
sum += parseInt(numberSplit[i]);
}
//0이 들어있지 않거나 모든 자리수의 합이 3의 배수가 아니면 -1출력
if (!numberSplit.includes("0") || sum % 3 !== 0) console.log(-1);
else {
//가장 큰 수를 출력하고 싶으므로 내림차순 정렬
const answer = numberSplit.sort((a, b) => b - a).join("");
console.log(answer);
}
먼저 30의 배수는 어떤 특징이 있는지 생각해봤다.
30, 60, 90, 120, 150, 180 ... 모두 일의 자리는 0이고 일의 자리를 제외한 나머지 숫자들은 3의 배수임을 알 수 있다.
즉, 30의 배수는 일의 자리가 항상 0이라는 10의 배수의 특징과, 모든 자리수의 합이 3으로 나누어 떨어진다는 3의 배수의 특징을 모두 가지고 있다.
따라서 0이 포함되어 있지 않거나 모든 자리수의 합이 3으로 나눠 떨어지지 않으면 무조건 -1을 출력하고, 그렇지 않으면 가장 큰 수를 출력해야 하므로 내림차순 정렬 후 출력하면 된다.
'JS-algorithm > BOJ' 카테고리의 다른 글
[백준] DFS와 BFS (javascript) (0) | 2023.07.15 |
---|---|
[백준] 두 수의 합 (javascript) (0) | 2023.07.10 |
[백준] 숫자 카드 2 (javascript) (0) | 2023.07.03 |
댓글