level1_콜라문제
2024. 11. 11. 22:20ㆍ파이썬_알고리즘(코딩테스트)/level1


내가 제출한 코드
def solution(a, b, n):
answer = 0
while n >= a:
# 나머지를 반환
remain_bottle = n % a
# 마트에서 받은 콜라의 수
n = (n//a) * b
answer += n
n += remain_bottle
return answer
- remain_bottle = n % a
- n을 a로 나눠주면 마트에서 바꾸지 않은 병이 나온다(remain_bottle)
- 나머지(%)
- n = (n//a) * b
- n을 a로 나눈 몫을 b(마트가 주는 콜라 병수)랑 곱해주면 마트에서 받은 콜라 수가 나온다.
- 받은 콜라 수를 answer에 더해준다
- 이후 남아있는 빈 병을 더해줘서 다음 마트에 갈 때 이용한다.
다른 사람 풀이1
solution = lambda a, b, n : max( n-b, 0) // (a - b) * b
- max(n-b,0)
- n에서 n를 뺀 값이 0보다 작으면 0을 반환하고, 0보다 크거나 같으면 (c-b) 값을 반환한다.
- (n - b)값을 (a - b)로 나눈 몫을 구한다.
- ((c - b) // (a - b)) 결과에 b를 곱해 최종 값을 계산한다.
https://blog.naver.com/doctorgu/222992407249
프로그래머스 콜라 문제 한줄 코딩 설명
https://school.programmers.co.kr/learn/courses/30/lessons/132267 대부분은 하나씩 빼가며 씀. 그런데 ...
blog.naver.com
참고 ,,, 블로그다...
다시 봐야겠다...ㅠㅠㅠㅠㅠㅠ 모르겠다.. 이 풀이
다른 사람풀이2
def solution(a, b, n):
answer = 0
while n >= a:
answer += (n // a) * b
n = (n // a) * b + (n % a)
return answer
- n >= a일 때 반복한다.
- 현재 빈 병의 수 n이 교환에 필요한 최소 빈 병의 수 a 이상일 때만 교환 가능하다.
- answer += (n // a) * b
- 현재 빈 병 n을 a로 나눠 교환 가능한 횟수를 계산하고
- 그 횟수에 b를 곱해 받을 수 있는 콜라의 수를 구한다.
- n = (n / / a) * b + (n % a)
- 새로 받은 콜라를 마시고 나온 빈 병 (n // a) * b와 기존에 교환하지 못한 나머지 빈 병 n % a를 더하여 새로운 빈 병의 수 n을 갱신한다.
- 더 이상 빈 병의 수 n이 a보다 작아서 교환이 불가능해지면 반복문을 종료하고, answer를 반환하여 총 얻은 콜라의 개수를 출력한다.
내가 제출한 풀이랑 비슷한거 같다.
'파이썬_알고리즘(코딩테스트) > level1' 카테고리의 다른 글
| level1_명예의 전당(1) (4) | 2024.11.14 |
|---|---|
| level1_같은 숫자는 싫어 (0) | 2024.08.12 |
| level1_문자열 내 마음대로 정렬하기 (0) | 2024.08.11 |
| level1_푸드 파이트 대회 (1) | 2024.08.11 |
| level1_K번째수 (0) | 2024.07.01 |