1. 문제
programmers.co.kr/learn/courses/30/lessons/12943
2. 내가 생각했던 첫번째 풀이과정
1) 함수 밖에 전역 변수 count를 선언해줍니다
2) 함수를 실행했을 때 count가 500이 되지 않으면 홀수인지 짝수인지 구분합니다
짝수일 경우: number를 2로 나눈 몫으로 대체하고, count +1 을 해주게 됩니다.
그 후, 나눈 몫을 매개변수로 재귀함수를 실행해줍니다
홀수일 경우: 숫자가 1인지 확인합니다(짝수인 경우에 생략한 이유는 1은 홀수이기 때문에 생략하였습니다)
1이 아니라면 (number * 3) + 1 값을 number 변수에 넣어 재귀함수를 실행해줍니다
만약 1일 경우 count를 출력해줍니다
3. 내가 생각했던 두번째 풀이과정
프로그래머스에서 전역변수를 인정해주지 않는 것 같아 첫번째 풀이과정을 포기하였습니다.
포기한 이후에 while문으로 대체하였습니다
4. 나의 첫번째 풀이
number = int(input())
count = 0
def solution(number):
global count
if count <= 500:
if number % 2 == 0: # 짝수
number = (number // 2)
count += 1
solution(number)
else: #홀수라면
if number != 1: #1이 아니라면
number = (number * 3) + 1
count += 1
solution(number)
else: #1이라면
print(count)
return count
else:
return -1
5. 나의 두번째 풀이
def solution(num):
count = 0
if num == 1:
return 0
while True:
num = num/2 if num % 2 == 0 else (num*3)+1
count += 1
if num == 1:
# print(count)
return count
elif count > 500:
# print(count)
return -1
# print(count)
return count
6. 다른 사람의 풀이
def collatz(num):
answer = 0
while answer < 500:
answer += 1
if num % 2 == 0:
num = num / 2
else:
num = (num * 3) + 1
if num == 1:
break
if answer == 500:
answer = -1
return answer
7. 새로 알게된 점
파이썬 전역변수를 사용할 때는 global 로 선언하면 함수 내에서 변수로 이용할 수 있다
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 하샤드 수 - 파이썬 (0) | 2020.12.28 |
---|---|
[프로그래머스] x만큼 간격이 있는 n개의 숫자 - 파이썬 (0) | 2020.12.27 |
[프로그래머스] 제일 작은 수 제거하기 (0) | 2020.12.25 |
[프로그래머스] 수박수박수박수박? (0) | 2020.12.25 |
[프로그래머스] 가운데 글자 가져오기 (0) | 2020.12.20 |
댓글