-
[백준 Node.js] 1110번 더하기 사이클To infinity/Coding Practice 2021. 6. 22. 14:29
2021.06.22
Question
Answer code
let fs = require('fs'); let input = Number(fs.readFileSync('/dev/stdin').toString()); const result = input let count = 0; while(true){ let sum = parseInt((parseInt(input/10)) + (input % 10) %10) let num = (input % 10)*10 + (sum % 10) input = num; count ++ if(result === num) break; } console.log(count);
How to solve?
이번 문제는 풀면서 '아, 바보같아'라는 현타를 느끼게 해준 문제였다. (눈물..)
처음에 해당 문제를 받았을 때, 배열로 풀려고 했었다. 그래서 어떻게 하면 배열을 나눌수 있을지 split[index]말고 좀 더 효율적인 방법이 없을지 생각했다.
그래서 찾아낸 방법은 Array.from(문자열)이라는, 배열의 문자열을 일괄로 배열로 바꿔버리는 방법을 찾고, 배열의 요소의 합을 반환해주는 Array.reduce()라는 메소드도 알게 됐다.
하지만, 논리를 더하면 더할수록 너무 복잡해져갔다. 일단, 문제는 두자리 수로 만들려면 타입이 문자열이어야 하는데 또 각 자리수를 더하려면 타입이 숫자여야 했다. 그러면 매번 타입을 바꿔줘야하는 번거로움이 생긴다.
그리고 한자리 수의 경우에는 앞에 0을 붙여 두자리수로 만들어줘야 인텍스 [1]로 불러왔을 때 해당값을 불러올 수 있었다. 그러면 조건문을 사용해서 처음 정수값이 10보다 작을때와 클때로 나눠서 식을 만들어 줘야 했다.
해당 문제는 어떤 배열이든 가장 끝에 있는 요소를 불러오는 기능으로 처리하려했지만 여전히 타입의 변환문제가 남아있었다.
그렇게 헤메이던 중에, 다시한번 문제를 읽어보았다. 문제에 분명 답이 있으니.
다시 자세히 살펴보니 내가 구해야하는 값은 처음 값으로 돌아오는데 걸리는 횟수였다. 즉, 중간값보다 몇번이나 반복되느냐를 묻는 것이었다.
안되겠어서 다른사람들은 어떻게 풀었는지를 찾아봤다.
그 순간 내가 진짜 바보같다는 생각을 했다. 사칙연산을 이용해서 아주 간단하게 푼 것이다.
'나머지'라는 개념을 잘 활용했는데 해당 개념은 실제로 잘 사용을 안해서 아직까진 어색한 감이 있지만 정말 현타가 오는 순간이었다. (복잡할 수록 단순하게 갈 줄 알아야하거늘..)
하지만 다시 정신차리고 문제를 풀었고 그 와중에 내가 놓친부분은 아래와 같다.
1. 나머지 값을 사용하기 위해선 정수로 변환해야 한다.
2. 최초값을 고정시키고 싶다면 새로운 변수에 넣어주자. (아니면 새로운 변수를 가지고 변환시키던가)
- 왜냐면 while문 안에서 계속 해당 값이 바뀌기 때문.
잘하자.
Reference
'To infinity > Coding Practice' 카테고리의 다른 글
[백준 Node.js] 2562번 최대값 (0) 2021.06.23 [백준 Node.js] 10818번 최대값 최소값 (0) 2021.06.22 [백준 Node.js] 10871번 X보다 작은 수 (새로운 문법 시도!) (0) 2021.06.21 [백준 Node.js] 11021번 A+B -7 (테스트케이스) (0) 2021.06.20 [백준 Node.js] 2741번 N 찍기 (0) 2021.06.20