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";
}