workSpace/ALGORITHM

[기념품 행사]

J o e 2021. 2. 2. 08:36

[문제]

세 자매가 해외여행 중 기념품 가게에 왔습니다.

이 기념품 가게에서는 한번에 50달러 이상 지출하면, 10달러를 할인해주는 행사를 하고 있습니다.그녀들은 구매한 물건을 합하여 계산하면, 각자 따로 지불하는 것보다 적게 지불할 수 있다는 것을 깨달았습니다.

예를들어 그들이 각각 46달러, 62달러, 9달러만큼의 상품을 구입하는 경우, 46달러와 9달러를 합치는 것으로 2번의 구매를 할 수 있습니다.이렇게 하면 55달러와 62달러로 거래하게 되어 총 20달러의 할인을 받을 수 있습니다.

여기 goods 가 주어집니다.goods 의 각 요소는 한 명이 구매하려는 물품의 총 비용입니다.

세 자매가 모든 상품을 구입하는데 드는 최소 비용을 리턴하세요.

(그녀들은 위 설명처럼 합쳐서 구매할 수 있지만, 자기가 구입할 상품을 나눠서 구매하지는 않습니다.)

풀이 1) - python

더보기
class Solution:
    def solution(self, goods):
        
        check=answer=0 
        for good in sorted(goods):
            check+=good
            if check >=50:
                answer += check-10
                check=0
                
        return answer if check==0 else answer+check

풀이 2) - java

더보기
import java.util.*;
public class Solution{
   	public int solution(int[] goods){
		int answer=0;
		int temp=0;
		Arrays.sort(goods);
		for(int i=0;i<goods.length;i++) {
		    temp+=goods[i];
		    answer+=goods[i];
			if(temp>=50){
				temp=0;
				answer-=10;
			}
		}
        return answer;
    }
}

풀이 3) - python

더보기
class Solution:
    def solution(self, goods):
        tempTotal = 0;
        temp = 0;
        for good in goods:
            if good < 50 :
                if temp + good >= 50:
                    tempTotal += good - 10
                    temp = 0;
                else :
                    tempTotal += good
                    temp += good
            else :
                tempTotal += good - 10 
        
        return tempTotal