CodeWars 서른 일곱 번째 문제

Updated:

Vasya - Clerk

public static String Tickets(int[] peopleInLine) {

    HashMap<Integer, Integer> changeMap = new HashMap<Integer, Integer>(); 
    changeMap.put(25, 0);
    changeMap.put(50, 0);
    changeMap.put(100, 0);

    for(int cost : peopleInLine){			
        if(cost == 25) {
            if(changeMap.get(25) == 0) {
                changeMap.put(25, 1);
            } else {
                changeMap.put(25, changeMap.get(25) + 1);
            }
        } else if(cost == 50) {
            if(changeMap.get(25) == 0) {
                return "NO";
            }

            changeMap.put(50, changeMap.get(50) + 1);
            changeMap.put(25, changeMap.get(25) - 1);
        } else {
            if(changeMap.get(25) == 0 || (changeMap.get(25) < 3 && changeMap.get(50) == 0)) {
                return "NO";
            } 

            if(changeMap.get(50) > 0) {
                changeMap.put(50, changeMap.get(50) - 1);
                changeMap.put(25, changeMap.get(25) - 1);
            } else {
                changeMap.put(25, changeMap.get(25) - 3);
            }
        }
    }

    return "YES";
}
  • Best 코드랑은 큰 차이는 없으나 Hashmap을 굳이 쓸 필요가 없었다.
  • 최근 몸이 좋지 않아 조금 쉬었더니 머리가 굳은건지 잔머리를 굴릴 필요가 있어 보인다.
public static String Tickets(int[] peopleInLine){
    int bill25 = 0, bill50 = 0;
    for (int payment : peopleInLine){
        if(payment==25){
            bill25++;
        } else if(payment==50){
            bill25--;
            bill50++;
        } else if(payment==100){
            if(bill50>0){
                bill50--;
                bill25--;
            } else{
                bill25-=3;
            }
        }
        if(bill25<0 || bill50 <0){
            return "NO";
        }
    }
    return "YES";
}