반응형
오늘의 문제. 문제 이름이 맘에 든다. 레모네이드 거스름돈!
At a lemonade stand, each lemonade costs $5. Customers are standing in a queue to buy from you, and order one at a time (in the order specified by bills). Each customer will only buy one lemonade and pay with either a $5, $10, or $20 bill. You must provide the correct change to each customer, so that the net transaction is that the customer pays $5. Note that you don't have any change in hand at first. Return true if and only if you can provide every customer with correct change.
1. 레모네이드 가격은 5$이다.
2. 손님들은 queue 형태로 줄서 있고, 한번에 하나만 주문한다.
3. 잔돈을 잘 거슬러주어야 한다. 그래서 net transaction은 손님이 5불을 지불했을 때이다.
4. 처음엔 잔돈이 없다.
5. 모든 손님에게 잔돈을 잘 거슬러줄 수 있을 때에만 true를 리턴하라.
Note:
1. 0 <= bills.length <= 10000
2. bills[i]는 5, 10, 20중 한가지.
금방 풀었다. 머릿속에 떠오른 로직을 그대로 그려내니까 바로 됐다. 바로바로 리턴시켜주니까 속도도 빠르게 나왔다. 나는 변수명을 ch5, ch10이라고 선언했는데 답안들 보니까 애초에 five, ten으로 한 사람들이 많았다. 음.. 더 직관적일 수 있겠군.
public class cote0317_860_LemonadeChange {
public boolean lemonadeChange(int[] bills) {
/*
~ 의식의 흐름 ~
들어온 돈은 잔돈에 ++ 된다.
들어온 돈 - 5한 만큼 거슬러줄 수 있어야 한다.
5, 10불 개수를 저장해야 한다.
10이면 5불, 20이면 15불(10+5 or 5+5+5)을 거슬러줘야 함.
*/
int ch5=0;
int ch10=0;
for(int i=0; i<bills.length; i++){
//빌 순서대로 체크해서 5불일 때, 10불일 때, 20불일 때로 나눠준다
if(bills[i]==5){ //5불 내밀었을 때
ch5++;
//continue;
}else if(bills[i]==10){ //10불 내밀었을 때
if(ch5 > 0){
ch5--;
ch10++;
//continue;
}else{
return false;
}
}else if(bills[i]==20){ //20불 내밀었을 때
if(ch5>0 && ch10>0){
ch5--;
ch10--;
//continue;
}else if(ch5>=3){
ch5-=3;
//continue;
}else{
return false;
}
}
}
return true;
}
}
거스름돈과 bill의 타입이 다양해져도 사용할 수 있도록 바꿔보면 좋을 것 같다.
+ ) 스터디 후 코멘트 추가
- continue; 는 if문 뒤에 다른 작업이 없을 경우 굳이 쓸 필요 없음...
728x90
반응형
'TIL > Coding Test' 카테고리의 다른 글
[프로그래머스] 주식가격 (0) | 2021.03.22 |
---|---|
[LeetCode] Majority Element (0) | 2021.03.20 |
[LeetCode] Two Sum (0) | 2021.03.16 |
[LeetCode] Top K Frequent Elements (0) | 2021.03.15 |
[LeetCode] Roman to Integer (2) | 2021.03.13 |