<프로그래머스, 콜라츠 추측 문제>

Minwoong Kim·2022년 10월 3일
0

Get out of my comfort zone

목록 보기
10/12

2022-Oct-3, today getting of my comfort zone.

해당 내용은 학습 목표로 작성되었으며, 향후 문제가 될 시. 즉시 삭제 조치 하겠습니다.

문제 설명

Collatz란 사람에 의해 제기된 이 추측은, 주어진 수가 1이 될 때까지 다음 작업을 반복하면, 모든 수를 1로 만들 수 있다는 추측이다.

1-1. 입력된 수가 짝수라면 2로 나눈다
1-2. 입력된 수가 홀수라면 3을 곱하고 1을 더한다.
2. 결과로 나온 수에 같은 작업을 1이 될 때까지 반복한다.

임의의 숫자가 주어질 때, 위의 작업을 몇 번이나 반복해야 하는지 반환하는 solution을 완성해라.

단, 주어진 수가 1인 경우에는 0을, 작업을 500번 반복할 때까지 1이 되지 않는다면 –1을 반환한다.

Comfort zone

while문과 삼항연산자에 의한 할당, 그리고 검증을 위한 if~else 문으로 문제를 해결하였다.

while의 조건은 true로 하여, 무한 loop로 만들어 놓고 특정 조건에서 break 되도록 설계하였다.

삼항연산자에 의해, num이 짝수 혹은 홀수 일때, 그에 맞는 연산을 수행한 값을 다시 num에 할당하도록 하였으며, 그때 마다 count값을 1씩 증가시키도록 하였다. (삼항 연산자에서 두개 이상의 수행식을 넣고 싶다면 괄호 처리 해줘야함)

또한, 문제 조건에 의해 주어진 숫자가 1인 경우는 count값이 0이 되도록 하였다.

마지막, if~else 문을 통해 while문을 빠져나오도록 하였다.

Get out of comfort zone

위의 풀이 과정이 좀 더 효율적인 로직 처리 순서를 가지도록 해보았다. 또한, 최대한 많은 조건을 삼항연산자로 처리하여 if~else문의 숫자를 줄였고 가독성을 높이는 방향으로 다시 시도해 보았다.

위의 풀이 과정과 비교하여 가장 큰 차이점은 num을 검사하는 순서가 달라졌다는 것이다. num이 1이라면 바로 break를 통해 while을 빠져나오게 하였으며,

num이 홀수 혹은 짝수일때의 적절한 연산을 통해 count 값을 증가시켜 500에 도달하면, count 값을 -1로 재할당 하도록 하였다.

결론적으로 num이 애초에 1이었든, 연산을 통해 1이 되었든, 처리 횟수가 500이 넘든, 단 두개의 조건 ( num===1 || count === -1 )으로 while을 break 할 수 있도록 변경했다.

느낀점

그간 연습했던 여러 문법들을(소수의..) 효과적으로 적용하여 멋진 코드를 완성한 것 같아서 성취감이 느껴졌다 ㅎㅎ

profile
Get out of my comfort zone

0개의 댓글