치킨 쿠폰

2024. 8. 30. 18:00코딩테스트 입문

https://school.programmers.co.kr/learn/courses/30/lessons/120884

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


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


제한사항

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

입출력 예

chicken result
100 11
1081 120

입출력 예 설명
입출력 예 #1

  • 100마리를 주문하면 쿠폰이 100장 발급되므로 서비스 치킨 10마리를 주문할 수 있습니다.
  • 10마리를 주문하면 쿠폰이 10장 발급되므로 서비스 치킨 1마리를 주문할 수 있습니다.
  • 따라서 10 + 1 = 11 을 return합니다.

입출력 예 #2

  • 1081마리를 주문하면 쿠폰이 1081장 발급되므로 서비스 치킨 108마리를 주문할 수 있습니다. 그리고 쿠폰이 1장 남습니다.
  • 108마리를 주문하면 쿠폰이 108장 발급되므로 서비스 치킨 10마리를 주문할 수 있습니다. 그리고 쿠폰이 8장 남습니다.
  • 10마리를 주문하면 쿠폰이 10장 발급되므로 서비스 치킨 1마리를 주문할 수 있습니다.
  • 1마리를 주문하면 쿠폰이 1장 발급됩니다.
  • 가지고 있는 쿠폰이 총 10장이므로 서비스 치킨 1마리를 추가로 주문할 수 있습니다.
  • 따라서 108 + 10 + 1 + 1 = 120 을 return합니다.

쿠폰으로 받을 수 있는 서비스 치킨의 개수를 찾는 문제입니다.

 

처음에는 문제를 잘못 읽어서 바로 chicken을 10으로 나눈 몫들을 전부 반환하면 되는 문제 아닌가 했는데, 쿠폰이 남았을 때 그걸 보충할 수 있으면 또 시킬 수 있다는 걸 생각 못했었습니다.

예제 2번에서도 잘 나와있는 것처럼 남겨둔 쿠폰들을 합쳐서 다시 치킨을 시킬 수 있습니다. 그래서 남은 쿠폰들을 계산해두는 게 중요하죠.

 

이 문제에서 특히 오류가 자주 나는 부분은 1999 - 222인 것 같습니다.

마지막에 28개의 쿠폰이 있는데, 20개로 2마리를 더 시키면 8 + 2로 1마리를 더 시킬 수 있기 때문입니다.

아래의 코드를 보시기 전에 1999, 222를 검증해보시기 바랍니다.

 

파이썬으로 문제를 풀어보겠습니다.

def solution(chicken):
    # 서비스로 받은 answer, 쿠폰의 개수 coupon
    answer, coupon = 0, chicken
    # 쿠폰의 개수가 10개 이상일 때
    while coupon >= 10:
        # 서비스로 10개마다 1개씩을 받습니다.
        answer += coupon // 10
        # 남은 쿠폰은 현재 쿠폰으로 시킨 서비스 치킨(coupon // 10)
        # + 쿠폰의 남은 개수(coupon % 10)
        coupon = coupon // 10 + coupon % 10
    return answer

coupon이 10개 이상일 때만 서비스 치킨을 주문할 수 있습니다.

answer에는 쿠폰으로 시킨 치킨의 개수를 추가해주고, coupon에는 서비스로 시킨 몫(coupon // 10), 남은 쿠폰의 개수(coupon % 10)을 더해서 계산합니다.

 

이게 왜 안 되지? 하고 당황해서 시간이 좀 걸렸네요. 생각보다 까다로웠습니다.

'코딩테스트 입문' 카테고리의 다른 글

A로 B 만들기  (0) 2024.09.01
이진수 더하기  (0) 2024.08.31
로그인 성공?  (0) 2024.08.29
등수 매기기  (2) 2024.08.28
특이한 정렬  (0) 2024.08.27