Programming/CodingTest

[HackerRank] Bill Division 문제 - Implementation

wave35 2024. 7. 28. 09:58

문제 설명

구현문제입니다.

친구들이 식사 후 식사비를 나누는 상황입니다. 하나의 친구는 특정 요리를 먹지 않았습니다.

요리를 나누고 계산했을 때, 그 친구는 본인이 먹지 않은 요리에 대해 청구된 부분에 대해 불만을 갖습니다.

친구들이 각자 내야 할 금액을 계산하고, 불만을 가진 친구가 정당하게 내야 할 금액과 비교하여 그 차이를 계산합니다.

https://www.hackerrank.com/challenges/bon-appetit/problem?isFullScreen=true

 

Bill Division | HackerRank

Determine whether or not Brian overcharged Anna for their split bill.

www.hackerrank.com

 

문제 접근 방법

  1. 입력:
    • 첫 번째 줄: 친구의 수 nn과 특정 친구가 먹지 않은 요리의 인덱스 k.
    • 두 번째 줄: 각 요리의 가격을 포함한 리스트 bill.
    • 세 번째 줄: 친구가 실제로 지불한 금액 b.
  2. 계산:
    • 특정 친구가 먹지 않은 요리를 제외한 총 요리 가격을 계산합니다.
    • 이를 친구 수 - 1로 나누어 친구당 내야 할 금액을 계산합니다.
    • 불만을 가진 친구가 실제로 지불한 금액과 비교합니다.
  3. 출력:
    • 불만을 가진 친구가 더 많이 지불했으면 그 차이를 출력하고, 그렇지 않으면 "Bon Appetit"를 출력합니다.

 

예제 

예를 들어, 다음과 같은 입력이 주어졌다고 가정합니다:

4 1
3 10 2 9
12

 

코드

def bonAppetit(bill, k, b):
    # 요리 가격 합산에서 특정 친구가 먹지 않은 요리의 가격을 제외
    actual_share = (sum(bill) - bill[k]) // 2 
    # actual_share = [v for i, v in enumerate(bill) if i != k]  # 리스트컴프리션으로 
    
    # 친구가 지불한 금액과 실제로 지불해야 할 금액 비교
    if b == actual_share:
        print("Bon Appetit")
    else:
        print(b - actual_share)

# 입력 값 예시
bill = [3, 10, 2, 9]
k = 1
b = 12
bonAppetit(bill, k, b)