코딩테스트 연습
콜라 문제
코딩초보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