코딩테스트 연습

콜라 문제

코딩초보ran 2023. 12. 20. 10:40

1. 문제 설명

2. 제한사항, 입출력 예 및 설명


3. 문제 풀이

# 빈 병 a개를 가져갔을 때 b개 병으로 교환해줌. (교환 비율로 생각하기)

def solution(a, b, n):
    answer = 0
    while True:
        q = n//a        # 안 빈 병 수(n)를 교환 시 필요한 빈 병 수(a)로 나눴을 때의 몫 구하기
        res = n - (a*q) # 안 빈 병 수에서 교환하고 남은 병 수(res) 구하기
        n = (q*b) + res # 교환 받은 병 수(q*b)를 위에서 구한 res와 더해서 새롭게 '가지고 있는 병 수'를 만들어줌
        
        answer += (q*b) # 총 교환 받은 병 수를 구하기 위해 계속 q*b를 더해줌
        
        if n < a:       # 만약, 내가 지금 가지고 있는 병 수가 a보다 작으면 break
            break
    return answer

 

위에서 res를 n - (a*q)로 구했는데, n % a 해도 된다.

  • n /a : n을 a로 나눴을 때의 결과값 구하기     ex) n=20, a=3, n/a= 6.66666..
  • n //a : n을 a로 나눴을 때의 몫 구하기          ex) n=20, a=3, n//a= 6
  • n % a : n을 a로 나눴을 때의 나머지 구하기  ex) n=20, a=3, n%a= 2

4. 채점 결과


5. 다른 사람 풀이

def solution(a, b, n):
    answer = 0

    while n >= a:
        n -= a
        answer += b
        n += b    


    return answer

 

나는 나눗셈을 할 생각만 해봤는데 뺄셈으로 작성한 분도 있었다.

그리고 while True에 break가 아니라, while 조건문으로 n>=a 을 넣어도 되겠다.

그럼 n이 a보다 작아지는 순간 반복문이 종료된다.

 

6. 다른 사람 채점 결과

 

나눗셈은 몫을 한 번에 구할 수 있는데, 위 코드는 뺄셈을 여러 번 해야하기 때문에 나눗셈을 한 코드보다 시간이 더 오래 걸린다.

 

문제 출처 : 프로그래머스/ 콜라 문제/ Lv1