Python(알고리즘,문제풀이)/프로그래머스(입문100제)
코딩테스트입문 / 유한소수 판별하기(소인수,최대공약수,return)
박혀노
2023. 8. 5. 11:07
728x90
📚문제
📝풀이
# 오류 난 내 코드
def gcd(a, b):
if a % b == 0:
return b
else:
return gcd(b, a%b)
def solution(a, b):
b = b // gcd(a, b)
result = []
start_num = 2
while start_num <=b:
if b % start_num==0:
result.append(start_num)
b = b//start_num
else:
start_num += 1
for i in result:
if i ==2 or i ==5:
return 1
return 2
일전에 풀었던 소인수개념과 최대공약수 개념이 모두 들어간 문제다
두 가지 개념을 참고하여 어렵지 않게 풀 수 있을 줄 알았는데
계속 실패가 떠서 시간이 꽤 오래걸렸다
다른 코드와 비교하여보니
내 코드의 마지막
for i in result:
if i ==2 or i ==5:
return 1
return 2
부분이 달라지면서 실패가 떴다
곰곰이 생각해보니
예를들어 소인수가 2,3 이렇게 있다면
처음 조건에서 i가 2이므로 1을 return하게 된다
따라서 더 if문을 더 타이트한 조건으로 변경해줘야한다
for i in result:
if i not in [2,5]:
return 2
return 1
result가 무조건 2나 5중에 있어야만 1을 return 하고 아니면 2를 return 하기
not in이 아니라 in 조건을 쓰게되면
마찬가지 예시로 (2,3) 경우에서
2가 if문에서 참이 되므로 1을 return 하게된다
for i in result:
if i not in [2,5]:
return 2
else:
return 1
만약 이렇게 if문 밑에 else문을 작성하게 되면
(2,3)같은 경우에
2가 else로 들어가게 되어
바로 1을 return하며 함수가 반복문이 진행되지 않고 함수가 종료된다
따라서 위 코드처럼
어느 한 값이라도 2나 5가 아니면 2를 반환하고
반복문이 종료될 때까지 해당이 되지 않는다면
for문이 끝난 이후에 1을 반환하면 된다
return문이 실행되면 즉시 함수 종료되며 그때의 반환값을 반환 . 이후의 반복문 진행 X
728x90