타입스크립트를 사용하면서 타입지정하라는 에러가 나올 때마다, 나름 열심히 처리를 해줬다.
다 처리한 뒤에 내 코드는 한 눈에 봐도 지저분했다.
예외처리를 해주기 위해 else가 범벅이었다.
예시코드를 보여주기 위해 예전에 풀었던 코딩테스트 코드를 가져왔다.
// 문제요약
// 콜라츠 추측 (아래 작업을 하면 모든 수를 1로 만들 수 있다는 추측)
// 1. 입력된 수가 짝수면 2로 나눕니다.
// 2. 입력된 수가 홀수면 3을 곱하고 1을 더합니다.
// 3. 이 작업을 1이 될 때까지 반복합니다.
// 위 작업을 몇 번해야 하는지 반환하라.
// 500번을 반복해도 1이 되지 않는다면 -1을 반환하라.
// 입출력 예시
// 6 -> 8
// 16 -> 4
// 626331 -> -1
// 통과한 코드 (21.06.12)
function solution(num) {
let answer = 0;
const collatz = function(num) {
if (num === 1) {
return answer;
} else if (answer >= 500) {
return -1;
}
answer ++;
if (num % 2 === 0) {
num = num / 2;
return collatz(num) // 이 부분이 있는데
} else {
num = num * 3 + 1;
return collatz(num) // 이 부분이 또 있다.
}
}
return collatz(num)
}
// 실행코드
console.log(solution(6)) // 8
return collatz(num)
이 쓸데없이 반복된다.
이런 식으로 코드를 작성하다 보면
기능이 커질수록 겉잡을 수 없이 반복코드가 나타날 것이다.
파이썬은 한 함수당 return값이 하나만 있어야 하는 코드규칙도 있다고 한다.
그 이야기를 조언 삼아서 규칙에 따라 코드를 수정했다.
function solution(num) {
let answer = 0;
const collatz = function(num) {
if (num === 1) {
return answer;
} else if (answer >= 500) {
return -1;
}
answer ++;
if (num % 2 === 0) {
num = num / 2;
} else if (num % 2 !== 0) {
num = num * 3 + 1;
}
return collatz(num)
}
return collatz(num)
}
반복이 1회 줄었다.
다른 부분은 재귀함수라서 return 값을 건들지 못했다.
뭔가 극적으로 변화하지 않는 모습이라서 아쉽다.
다음에 더 적합한 예시를 찾으면 추가하겠다.