[python_파이썬_pass]프로그래머스_LV1_콜라 문제_풀이

2024. 5. 14. 12:44코드리뷰

728x90
반응형

공부하는허딩크 : https://www.youtube.com/live/d04PXaSTIlQ?feature=shared

처음에 이 문제를 만났을때 지문도 길고 복잡할 것 같다는 생각이 들어서 다른 문제로 도망쳤다.

 

그리고 백준에서 조금 경험을 쌓고 티어 실버 2를 만들고 다시 문제를 찾았다.

어차피 풀어야 할 거 다시 마음 먹고 도전했다.

 

<첫번째 시도 : 예제는 통과되었으나 7.1점으로 실패>

.혼자 고민한 결과 변수 b를 적용하지 않는 코드였다. 그래서 예제는 통과되었으나 제출시 통과를 못했다.

#b를 활용하지 못함
def solution(a, b, n):
    answer = 0
    while n >= a:
        answer += n // a
        m = n % a
        n = (n // a) + m
    return answer

 

<두번째 시도 : 통과>

def solution(a, b, n):
    answer = 0
    while n >= a:
        answer += n // a * b
        m = n % a
        n = (n // a) * b + m
    return answer

 

천천히 문제를 보면서 고민을 하면서 수학적 규칙을 발견했다.

1. answer에는 빈병으로 받을 수 있는 새로운 콜라를 계속해서 더해준다.

2. m에는 빈병을 남겨준다.

3. n에는 새로운 콜라가 어차피 빈병이 될 것이므로 새로운 빈병  기존 빈병을 해서 n이 a보다 작아질때 까지 반복하면

최종 얻을 수 있는 콜라의 개수가 나온다.

 

<다른사람 풀이 참고>

고민했던 내가 바보가 된 느낌이다.

1. 처음 주어진 빈병 n에 계속 a를 빼준다.

2. a가 빠지면서 새로운 콜라 b만큼 생기기 때문에 answer += b로 계속 더해준다.

3. 새로운 콜라 b가 다시 빈병이 됨으로 n에 더해준다. 이걸 계속 반복하면 n이 a보다 작아지는 시점에 최종 콜라의 개수가 나온다.

def solution(a, b, n):
    answer = 0
    while n >= a:
        n -= a
        answer += b
        n += b    
    return answer

 

728x90
반응형