| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 |
- 노마드스터디
- 11047 node.js
- 1541 node.js
- 자바스크립트 딥다이브
- 백준25176
- 1931 node.js
- flex box
- 14655 nodejs
- 자바스크립트 함수
- 21313 nodejs
- 1789 node.js
- 개발자
- 백준21313
- 2217 node.js
- 백준1026
- 모던자바스크립트DeepDive
- 백준1789
- 노개북
- IT5분잡학사전
- 모던자바스크립트
- 자바스크립트 일급객체
- 모던자바스크립트 딥다이브
- 노마드북클럽
- Javascript
- 개인프로젝트
- const
- 11399 node.js
- 코딩
- CSS flex
- 1026 node.js
- Today
- Total
캐또's coding
1110 - 더하기 사이클 - node.js 본문
문제
0보다 크거나 같고, 99보다 작거나 같은 정수가 주어질 때 다음과 같은 연산을 할 수 있다. 먼저 주어진 수가 10보다 작다면 앞에 0을 붙여 두 자리 수로 만들고, 각 자리의 숫자를 더한다. 그 다음, 주어진 수의 가장 오른쪽 자리 수와 앞에서 구한 합의 가장 오른쪽 자리 수를 이어 붙이면 새로운 수를 만들 수 있다. 다음 예를 보자.
26부터 시작한다. 2+6 = 8이다. 새로운 수는 68이다. 6+8 = 14이다. 새로운 수는 84이다. 8+4 = 12이다. 새로운 수는 42이다. 4+2 = 6이다. 새로운 수는 26이다.
위의 예는 4번만에 원래 수로 돌아올 수 있다. 따라서 26의 사이클의 길이는 4이다.
N이 주어졌을 때, N의 사이클의 길이를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 N이 주어진다. N은 0보다 크거나 같고, 99보다 작거나 같은 정수이다.
출력
첫째 줄에 N의 사이클 길이를 출력한다.
예제 입력 1 복사
26
예제 출력 1 복사
4
예제 입력 2 복사
55
예제 출력 2 복사
3
예제 입력 3 복사
1
예제 출력 3 복사
60
예제 입력 4 복사
0
예제 출력 4 복사
1
예제 입력 5 복사
71
예제 출력 5 복사
12
알고리즘 분류
입력으로 주어진 정수에 대해서 다음의 계산을 한다.
1. 주어진 수의 각 자리 수를 더한다. 한 자리 수라면 0x라고 생각해서 계산한다.
= Math.floor(input/10) + (input % 10) 한 자리든 두 자리든 상관 없다 한 자리 수라면 0+x를 해줄 것이다.
2. 입력된 수의 오른쪽 자리 수는 10의자리 + 1번 결과의 오른쪽 자리 수를 더하면 새로운 수가 된다.
새로운 수 = (input % 10 * 10) + 1번결과
3. 새로운 수가 만들어지면 1사이클이다. count에 +1을 해준다.
4. 새로운 수가 최초로 주어진 정수와 같다면 count 수를 보여주고 그렇지 않다면 다시 처음부터 반복한다.
const input = Number(require("fs").readFileSync("/dev/stdin").toString());
let count = 0;
let sumNum;
let newNum = input;
while (true) {
count++;
sumNum = (newNum % 10) + Math.floor(newNum / 10);
newNum = (newNum % 10) * 10 + (sumNum % 10);
if (newNum == input) {
console.log(count);
break;
}
}
문제에서 자꾸 틀렸던 이유가 있었는데, 처음 입력값을 계산하는 반복문에서 새로운 수로 다시 계산되지 않고 최초의 입력값으로 계산을 해버리는 바람에... 그러니까 sumNum = (newNum % 10) 이 부분을 (input % 10)이라고 하는 바람에 반복문이 계속해서 반복되어 버렸다. 처음 input을 받고 다음에는 따로 변수로 저장한 newNum으로 계산해야 기존값과 별개로 계산이 진행된다.
'기초 공부 > 백준 문제 풀이' 카테고리의 다른 글
| 2562 - 최댓값 - node.js (0) | 2022.08.17 |
|---|---|
| 10818 - 최소, 최대 - node.js (0) | 2022.08.17 |
| 10951 - A + B - 4 - node.js (0) | 2022.08.16 |
| 10952 - A + B - 5 - node.js (0) | 2022.08.16 |
| 10871 - X보다 작은 수 - node.js (0) | 2022.08.16 |