<로직 고민/>
- 음 while문을 써야할 것 같군
- if-else문으로 짝수, 홀수인 경우를 나눠야 하고 ..일단 해보자!
def solution(num):
answer = 0
# 주어진 수가 1인 경우
if num == 1:
return 0
while answer > 500:
# 짝수일 때
print(num)
if num % 2 == 0:
num = num // 2
answer += 1
# 홀수일 때
else:
num = num * 3 + 1
answer += 1
print("홀수", num)
if num == 1:
return answer
return -1
- num이 1인 경우를 while문 안에서 어떻게 해야 하나 하다가 num이 처음부터 1이라면 while문을 돌 필요없이 바로 리턴하면 된다는 걸 번뜩 떠올렸다 그래서 먼저 num이 1인지를 판별하고 1이 아니라면 코드가 계속 진행돼서 while문을 돈다
- 근데 answer가 500보다 커지면 멈추라는 의미로 이렇게 했는데 while문이 실행되지 않았다
- 그래서 <= 로 바꿨더니 정답..!
- 처음에 쓴 건 answer가 500보다 큰 동안 while문을 돌려라 라는 말이었다...ㅎㅎ while문이 실행되지 않을 수밖에,,,
- 아 제출할 때 프린트문 다 안 지우고 제출했다 어쩐지 실행시간이 길더라니....
<완성된 코드/>
- 첫 번째 코드
def solution(num):
answer = 0
# 주어진 수가 1인 경우
if num == 1:
return 0
while answer <= 500:
# 짝수일 때
if num % 2 == 0:
num = num // 2
answer += 1
# 홀수일 때
else:
num = num * 3 + 1
answer += 1
if num == 1:
return answer
return -1
- 다시 보니 answer += 1을 2번 넣을 거 없이 if-else문 다음에 한 번에 처리해도 될 것 같다
- 두 번째 코드
def solution(num):
answer = 0
# 주어진 수가 1인 경우
if num == 1:
return 0
while answer <= 500:
# 짝수일 때
if num % 2 == 0:
num = num // 2
# 홀수일 때
else:
num = num * 3 + 1
answer += 1
if num == 1:
return answer
return -1
- 다른 사람 풀이를 봤는데 answer < 500이어도 정답이다 흠 왜지..?
- answer < 500일 때까지 while문을 돌린다는 건 499번 반복하는 거 아닌가?