[프로그래머스] LV.0 치킨 쿠폰

seho·2023년 2월 22일
0

codetest

목록 보기
9/17
post-thumbnail

문제

프로그래머스 치킨은 치킨을 시켜먹으면 한 마리당 쿠폰을 한 장 발급합니다. 쿠폰을 열 장 모으면 치킨을 한 마리 서비스로 받을 수 있고, 서비스 치킨에도 쿠폰이 발급됩니다. 시켜먹은 치킨의 수 chicken이 매개변수로 주어질 때 받을 수 있는 최대 서비스 치킨의 수를 return하도록 solution 함수를 완성해주세요.

제한사항

- chicken은 정수입니다.
- 0 ≤ chicken ≤ 1,000,000

입출력 예시

chicken	result
100	11
1,081	120

풀이

  1. 쿠폰이 서비스 치킨에서도 나오는데 이 처리를 잘 해주어야한다.
  2. 주문 치킨이 0이 될 때 까지 반복문을 통해 처리해주도록 한다

풀이 1 - 내 풀이

def solution(chicken):
    answer = 0
    remain_sum = 0
    while chicken>0:
        service = chicken//10
        remain_coupon = chicken%10
        chicken = service
        
        answer+=service
        remain_sum+=remain_coupon
        if remain_sum>=10:
            answer+=1
            remain_sum-=9 
    return answer
  • answer 변수에 서비스 치킨의 수를 계속 더해주고, remain_sum 변수에는 남은 쿠폰 수를 계속 더해주면서 그에 대한 서비스 치킨의 수를 더해줄 것이다.
  • while chicken>0: 반복문을 사용해 주문하는 치킨의 수가 0이 될 때 까지 계속 무한 반복해준다. chicken 변수는 service 치킨 변수로 바뀌며 반복문을 돌게 된다.
  • service는 치킨을 입력받은 변수 chicken 만큼 주문하면 받을 수 있는 치킨의 수 이다. remain_coupon 은 쿠폰으로 서비스 치킨을 시킨 후 남은 쿠폰의 수 이다.
  • 그렇게 값을 구해주면 chicken 변수에 다시 주문한 service의 수를 담아서 바꿔준다.
  • answer 변수에는 서비스로 받은 치킨의 수를 더해서 보관해준다.
  • remain_sum 변수에는 남은 쿠폰의 수 remain_coupon의 수를 더해서 보관하는데, if 문을 통해 remain_sum이 10장 이상이면 answer변수에 서비스 치킨 한 마리를 추가해주고, remain_sum 변수에 원래 10장의 쿠폰을 빼주어야 하지만 우리는 치킨 한마리를 또 시켰으므로 9만큼 빼준다.
  • 이렇게 모든 루프를 돌면 서비스 치킨이 몇 마리인지 확인할 수 있다.

오답노트

  • 서비스 치킨에도 쿠폰이 온다. 이 점이 어렵고 현실에서 이런집이 있나싶다..
  • while 반복문을 잘 사용해야하는데 chicken 변수를 변경하면서 무한으로 돌리는 방법을 잘 기억하면 좋겠다.
  • 남은 쿠폰으로 서비스 치킨을 주문할 때 10장 차감을 하고 1장을 더해주는 것도 기억해주어야 한다.
profile
develop my'self and sw

0개의 댓글