반응형
문제
어느 날, 미르코는 우연히 길거리에서 양수 N을 보았다. 미르코는 30이란 수를 존경하기 때문에, 그는 길거리에서 찾은 수에 포함된 숫자들을 섞어 30의 배수가 되는 가장 큰 수를 만들고 싶어한다.
미르코를 도와 그가 만들고 싶어하는 수를 계산하는 프로그램을 작성하라.
입력
N을 입력받는다. N는 최대 105개의 숫자로 구성되어 있으며, 0으로 시작하지 않는다.
출력
미르코가 만들고 싶어하는 수가 존재한다면 그 수를 출력하라. 그 수가 존재하지 않는다면, -1을 출력하라.
예제 입력 1 복사
30
예제 출력 1 복사
30
예제 입력 2 복사
102
예제 출력 2 복사
210
예제 입력 3 복사
2931
예제 출력 3 복사
-1
예제 입력 4 복사
80875542
예제 출력 4 복사
88755420
정답 풀이
const fs = require("fs");
// 백준 제출 할 때 주석 제거
// const readFileSyncAddress = '/dev/stdin';
// VSC 테스트 할 때 주석 제거
const readFileSyncAddress = "input.txt";
const input = fs.readFileSync(readFileSyncAddress).toString().trim().split("\n");
const n = input[0];
// 문제 풀이
function solution(n) {
// 우선 0이 포함되어 있지 않으면 30의 배수가 아니다.
if (!n.split('').includes('0')) {
console.log('-1');
return;
}
// 모든 자리의 수를 합하고, 그게 3으로 나누어지면 3의 배수이다.
const numberSplitArray = n.split('').map(i => Number(i));
const sumOfEachPosition = numberSplitArray.reduce((acc, cur) => acc + cur);
if (sumOfEachPosition % 3 !== 0) console.log('-1');
else console.log(numberSplitArray.sort((a, b) => b - a).join(''));
}
// 제출
solution(n);
핵심 아이디어는 각 자리의 수를 합해서 3으로 나누어지면 그 수는 3의 배수라는 것이다.
102 숫자가 있으면 102의 각 자리를 더한 값
1 + 0 + 2 = 3이다.
3은 3으로 나누어 떨어지기 때문에 102는 3의 배수이다.
그 중에 제일 큰 값을 뽑으려면 102를 split으로 나눠 배열로 만든 다음
sort로 내림차순 정렬을 하면 된다.
반응형
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 1715번: 카드 정렬하기 (JavaScript, NodeJS) (0) | 2022.01.08 |
---|---|
[백준] 1339번: 단어 수학 (JavaScript, NodeJS) (0) | 2022.01.07 |
[백준] 2217번: 로프 (JavaScript, NodeJS) (0) | 2022.01.05 |
[백준] 1026번: 보물 (JavaScript, NodeJS) (0) | 2022.01.05 |
[백준] 2630번: 색종이 만들기 (JavaScript, NodeJS) (0) | 2021.08.31 |