else 지옥 탈출하기

flobeeee·2021년 8월 16일
0

시행착오

목록 보기
19/45
post-custom-banner

타입스크립트를 사용하면서 타입지정하라는 에러가 나올 때마다, 나름 열심히 처리를 해줬다.
다 처리한 뒤에 내 코드는 한 눈에 봐도 지저분했다.
예외처리를 해주기 위해 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 값을 건들지 못했다.
뭔가 극적으로 변화하지 않는 모습이라서 아쉽다.
다음에 더 적합한 예시를 찾으면 추가하겠다.

profile
기록하는 백엔드 개발자
post-custom-banner

0개의 댓글