📝 문제
https://programmers.co.kr/learn/courses/30/lessons/12943
🎨 풀이
💡 첫번째 시도
- 이 문제는 콜라츠라는 사람이 추측한 내용을 코드로 옮기는 것이였다. 내용은 다음과 같다.
1-1. 입력된 수가 짝수라면 2로 나눕니다.
1-2. 입력된 수가 홀수라면 3을 곱하고 1을 더합니다.
2. 결과로 나온 수에 같은 작업을 1이 될 때까지 반복합니다.
def solution(num):
answer = -1
for i in range(0,501):
if num % 2 == 0 :
num /= 2
else :
num = num * 3 + 1
if num == 1 :
answer = i + 1
break;
return answer
> answer에 먼저 -1이 될 때를 넣어두고, 콜라츠의 추측대로 실행한 후 만약 500번이 지나기 전에 num이 1이 된다면 그 때 answer에 횟수를 넣어주는 방법으로 코딩을 했다. 다른 거는 다 잘 통과가 되었는데 테스트 13번만 유일하게 오류가 뜨더라. 질문하기 창에서 13번에 관한 정보를 찾아보니 13번은 num이 1일때의 경우라 1에 대한 처리를 해주어야한다고 했다. 그래서 코드를 다음과 같이 고쳐보았다.
💡 두번째 시도
def solution(num):
answer = -1
if num == 1:
answer = 0
return answer
for i in range(0,501):
if num % 2 == 0 :
num /= 2
else :
num = num * 3 + 1
if num == 1 :
answer = i + 1
break;
return answer
> num이 1일때 answer에 0을 넣고 바로 return하는 코드를 짰더니 성공했다. (answer에 0을 넣는 이유는, num이 1인 경우를 찾기 위해서 이 코드를 실행하는 것인데 입력값부터 이미 1이면 그 방법을 쓸 필요가 없기 때문이다)
⭐ 느낀점
> 문제만 보고는 코드 내용대로 짜면 될 것 같아 조금 자신있었는데, 케이스 처리를 제대로 생각하지 못해서 틀렸던 것 같다. 입력값을 제대로 보고 고민해봐야겠다는 생각이 조금 든다.
'알고리즘 공부 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 / Level 1] x만큼 간격이 있는 n개의 숫자 (파이썬) (0) | 2022.03.27 |
---|---|
[프로그래머스 / Level 1] 행렬의 덧셈 (파이썬) (0) | 2022.03.26 |
[프로그래머스 / Level 1] 핸드폰 번호 가리기 (파이썬) (0) | 2022.03.25 |
[프로그래머스 / Level 1] 하샤드 수 (파이썬) (0) | 2022.03.24 |
[프로그래머스 / Level 1] 평균 구하기 (파이썬) (0) | 2022.03.23 |