[HackerRank] Bill Division

아르당·2023년 10월 25일
0

HackerRank

목록 보기
2/109
post-thumbnail

문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음

문제

안나와 브라이언은 저녁 식사 금액을 어떻게 나눌지 고민하고 있다. 자기가 먹은 것만 계산할 것이다. 브라이언은 영수증을 받고 안나의 금액을 계산한다. 너는 그의 계산이 맞는지 확인해야 한다.
예를 들면 bill = [2, 4, 6]의 영수증을 받았다. 안나는 가격이 6인 음식을 먹는 것을 거부했다. 브라이언이 맞게 계산했다면, 안나는 (2 + 4) / 2 = 3을 지불한다. 그가 bill[2]의 금액을 포함시켰다면, (2 + 4 + 6) / 2 = 6으로 계산할 것이다. 두 번째 경우, 그는 안나에게 3을 돌려줘야 한다.

Function Description

bonAppetit 함수를 작성해라. 금액이 정확히 나눠지면 "Bon Appetit"를 출력해야 한다.
bonAppetit 함수는 아래와 같은 매개변수를 가지고 있다.

  • bill: 각 주문한 항목의 금액을 나타낸 정수의 배열
  • k: 안나가 먹지 않은 항목을 0에서 시작하는 Index
  • b: 안나가 지불한 금액

Constraints

  • 2 <= n <= 10^5
  • 0 <= k < n
  • 0 <= bill[i] <= 10^4
  • 0 <= b <= (bill[0] + bill[1] + ... +bill[n - 1])
  • 안나가 지불한 금액은 항상 정수이다.

Output Format

브라이언이 안나에게 초과된 금액을 지불하지 않는 경우, "Bon Appetit"을 출력한다. 그렇지 않으면 브라이언이 안나에게 돌려줘야 할 금액을 출력한다. 이때 금액은 항상 정수이다.

풀이

먼저 계산할 금액을 할당할 변수를 선언한다. 문제에서 actual을 사용하여 변수명으로 하였고, 항목의 최대값으로 모두 합해도 Integer 범위 내라서 int로 선언했다.

int actual = 0;

반복문을 통해 합을 구한다. 이때 index k는 안나가 먹지 않은 음식이므로 제외 한다.

for(int i = 0; i < bill.size(); i++){
	if(i == k){
		continue;
	}else{
		actual += bill.get(i);
	}
}

합을 구했다면 안나의 지불 금액을 구하기 위해 2로 나누고, actual에 할당한다.

actual /= 2;

마지막으로 b와 actual을 비교한다. 같다면 "Bon Appetit"를 출력하고, 그렇지 않다면 안나에게 돌려줘야할 금액을 출력한다.

if(actual == b){
	System.out.println("Bon Appetit");
}else{
	System.out.println(b - actual);
}

전체 코드

public static void bonAppetit(List<Integer> bill, int k, int b) {
    int actual = 0;
        
    for(int i = 0; i < bill.size(); i++){
        if(i == k){
            continue;
        }else{
            actual += bill.get(i);
        }
    }
        
    actual /= 2;
        
    if(actual == b){
        System.out.println("Bon Appetit");
    }else{
        System.out.println(b - actual);
    }
}
profile
내 마음대로 코드 작성하는 세상

0개의 댓글