출처 : 백준 온라인 저지
https://www.acmicpc.net/problem/1110
문제 요약
주어진 수의 가장 오른쪽 자리 수와 앞에서 구한 합의 가장 오른쪽 자리 수를 이어 붙이면 새로운 수를 만들 수 있다. 다음 예를 보자.
26부터 시작한다. 2+6 = 8이다. 새로운 수는 68이다. 6+8 = 14이다. 새로운 수는 84이다. 8+4 = 12이다. 새로운 수는 42이다. 4+2 = 6이다. 새로운 수는 26이다.
위의 예는 4번만에 원래 수로 돌아올 수 있다. 따라서 26의 사이클의 길이는 4이다.
N이 주어졌을 때, N의 사이클의 길이를 구하는 프로그램을 작성하시오.
나의 접근방법
단순하게 예제를 손으로 옮겨적고 경우의 수를 늘여뜨려 수식으로 구현하려고 했다.
하지만 계속 변수를 업데이트 하고 그 변수를 가지고 비교하고 업데이트 하고 하나의 변수로 계속 수식을 구현하다보니 헷갈렸다.
또한 입력이 한자리 수 일 때, 두자리 수 일 때, 결과값이 한 자리 수 일때, 두 자리 수 일 때 4자기 예외케이스에 대해서도 코드를 작성해야 할뿐더러 매번 타입 변환도 해줘야하는 번거로움이 있었다.
단계가 복잡한만큼 실수할 여지도 많았고, 결과를 도출해내도 썩 좋지 않은 로직일 것이라는 생각이 들었다.
아직 3단계 문제 일 뿐인데.. 결국 문제를 스스로 풀지는 못했다.
다른 사람의 풀이
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
rl.on('line', function(line) {
const input = +line;
let num = +line;
let sum;
let count = 0;
while (true) {
count++;
sum = Math.floor(num/10) + num % 10;
num = (num % 10) * 10 + sum%10;
if(input === num){
break;
}
}
console.log(count);
}).on('close', function() {
process.exit();
});
수식이 이루어지는 자리값을 계산하는 수식을 알면 쉽게 해결할 수 있는 문제였다.
1의 자리의 수 : 주어진 값 % 10 즉, num % 10
10의 자리의 수 : Math.floor(num / 10)
1의 자리의 수 10의 자리의 수로 만들기 : (num%10) * 10
'알고리즘' 카테고리의 다른 글
백준 JS | 4673번 셀프 넘버 (0) | 2022.05.05 |
---|---|
백준 온라인저지 100% 활용하기 ( vscode에서 nodejs 디버깅 모드 사용) (1) | 2022.05.02 |
백준 JS | 2525번 오븐시계 (0) | 2022.04.13 |
Algorithm | String형 인자에서 중복되지 않는 가장 긴 단어의 길이 반환하기-CodeKata3 (0) | 2022.01.18 |
Algorithm | Brackets 유효성 로직 구현 (0) | 2022.01.17 |