문제 설명
https://school.programmers.co.kr/learn/courses/30/lessons/120884#
내 풀이
def solution(chicken):
answer = 0
coupon = 0
# tmp는 현재 시킨 치킨 수
# answer은 모든 서비스 치킨 수(tmp의 합)
tmp = chicken
while tmp > 0:
coupon += tmp % 10
answer += tmp // 10
tmp = tmp // 10
coupon += tmp
while coupon >= 10:
t = coupon // 10
answer += t
coupon += t
coupon -= t * 10
return answer
먼저, tmp는 한 스텝마다 시킨 치킨 수를 의미한다.
answer은 모든 서비스 치킨의 수를 의미하고, coupon은 현재 있는 쿠폰의 수를 의미한다.
테스트 케이스 2를 기준으로 확인해보면..
1) 처음 1081마리 주문 / 현재 남은 쿠폰 0장 / 서비스 치킨 0마리 시킴
2) 앞서 생긴 1081장 쿠폰으로 현재 108개의 서비스 치킨 주문 / 남은 쿠폰 1장 / 서비스 치킨 총 108마리 시킴
3) 앞서 생긴 108개+1장의 쿠폰으로 10개의 서비스 치킨 주문 / 남은 쿠폰 9장 / 서비스 치킨 총 118마리 시킴
4) 앞서 생긴 10+9장의 쿠폰으로 1개의 서비스 치킨 주문 / 남은 쿠폰 9장 / 서비스 치킨 총 119마리 시킴
그 후, tmp(현재 시킨 치킨 수)가 0이 되면, coupon에 tmp를 더하여, 총 현재 남은 쿠폰 수를 계산한다.
coupon += tmp
coupon이 10개 이상이면 서비스 치킨 1마리를 시킬 수 있으므로, 별도의 while문을 두어 처리를 진행하였다.
while coupon >= 10:
# t는 현재 시킨 서비스 치킨 수
t = coupon // 10
answer += t
coupon += t
coupon -= t * 10
수정해본 풀이
다른 사람의 풀이를 보고 while tmp > 0은 없어도 될 듯하여, 없애보았다.
def solution(chicken):
answer = 0
coupon = chicken
while coupon >= 10:
# t는 현재 시킨 서비스 치킨 수
t = coupon // 10
answer += t
# 현재 시킨 서비스 치킨 수 만큼 coupon 개수를 더함
coupon += t
# 현재 시킨 서비스 치킨 수 * 10만큼 coupon 개수를 뺌
coupon -= t * 10
# coupon = coupon%10 + t 와 같음
return answer
다른 사람 풀이
[코드 1]
def solution(chicken):
answer = (max(chicken,1)-1)//9
return answer
시키면 적어도 1마리는 받는다.
서비스 치킨에도 쿠폰이 한장 발급된다. 10에서 9로 나눠주어야 서비스 개수가 나온다.
[코드 2]
# answer : 최대 서비스 치킨의 수
# eaten : 쿠폰으로 먹은 치킨의 수
# coupon : 잔여 쿠폰의 수
def solution(chicken):
answer = 0
coupon = chicken
while coupon >= 10:
eaten = coupon//10
answer += eaten
coupon = coupon%10 + eaten
return answer
느낀점
뭔가 풀릴 것 같은데, 잘 안풀렸던 풀이였다ㅠㅠ
다른사람들의 풀이를 보니 생각보다 쉽게 푼듯하다
나도 더 잘 풀고싶다
'코딩테스트 > PYTHON' 카테고리의 다른 글
[프로그래머스][PYTHON] Lv. 0 특이한 정렬 (0) | 2024.04.02 |
---|---|
[프로그래머스][PYTHON] Lv. 0 유한소수 판별하기 (1) | 2024.03.29 |
[프로그래머스][PYTHON] Lv. 0 등수 매기기 (0) | 2024.03.20 |
[프로그래머스][PYTHON] Lv. 0 이진수 더하기 (0) | 2024.03.20 |
[프로그래머스][PYTHON] Lv. 0 삼각형의 완성조건 (2) (3) | 2024.03.19 |