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
'Python(알고리즘,문제풀이) > 프로그래머스(입문100제)' 카테고리의 다른 글
코딩테스트입문 / 등수 매기기 (0) | 2023.08.07 |
---|---|
코딩테스트입문 / 특이한 정렬 (0) | 2023.08.07 |
코딩테스트입문 / 겹치는 선분의 길이 (0) | 2023.08.05 |
코딩테스트입문 / 평행 (0) | 2023.08.04 |
코딩테스트입문 / 외계어 사전 (0) | 2023.08.03 |