https://school.programmers.co.kr/learn/courses/30/lessons/12943
짝수인 경우와 홀수인 경우를 나눠서 생각을 해주었고, 500회 이상의 연산과 같은 예외처리를 따로 해줬다.
의식의 흐름대로 코드를 짰더니 뭔가 장황해보인다. 그래서 좀 더 축약할 수 있는 방법을 생각해보았다.
def solution(n):
cnt = 0
while n != 1:
if n % 2 == 0:
n /= 2
cnt += 1
else:
n = 3 * n + 1
cnt += 1
if cnt == 500:
cnt = -1
break
return cnt
다음과 같이 삼항연산자를 사용하여 고쳐봤다.
n = int(input())
cnt = 0
while n != 1:
n /= 2 if n % 2 == 0 else n * 3 + 1
cnt += 1
if cnt == 500:
cnt = -1
break
print(cnt)
하지만 답이 계속 -1로 나온다.. 뭐가 문제인지 모르겠다.
n = int(input())
cnt = 0
while n != 1:
n = n / 2 if n % 2 == 0 else n * 3 + 1
cnt += 1
if cnt == 500:
cnt = -1
break
print(cnt)
이상하게 n /= 2가 아닌, n = n / 2로 고쳐 써놓으니 된다. 왜 이런지 모르겠다..
하지만 이 코드는, n = 1일때의 예외처리를 포함하지 못한다. cnt가 n을 연산하는 식의 바깥에 있기 때문이다.
n = int(input())
cnt = 0
if n == 1:
cnt = 1
else:
while n != 1:
n = n / 2 if n % 2 == 0 else n * 3 + 1
cnt += 1
if cnt == 500:
cnt = -1
break
print(cnt)
그럼 위와 같이 작성해야 하는데.. 그냥 첫번째 코드가 가장 나아보인다.
'Algorithm > Programmers lv.1' 카테고리의 다른 글
[프로그래머스] 없는 숫자 더하기 (0) | 2024.07.07 |
---|---|
[프로그래머스] 음양 더하기(zip함수) (0) | 2024.07.07 |
[프로그래머스] 서울에서 김서방 찾기(format, index, return문에서 문자열과 정수를 함께 쓰는법) (0) | 2024.07.06 |
[프로그래머스] 나머지가 1이 되는 수 찾기 (0) | 2024.07.06 |
[프로그래머스] x만큼 간격이 있는 n개의 숫자(range 활용) (0) | 2024.07.06 |