본문 바로가기

Python(알고리즘,문제풀이)/프로그래머스(입문100제)

코딩테스트입문 / 유한소수 판별하기(소인수,최대공약수,return)

728x90

📚문제

출처 : 프로그래머스 / 유한소수 판별하기(https://school.programmers.co.kr/learn/courses/30/lessons/120878)

 

📝풀이

# 오류 난 내 코드
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