문제 설명
팀의 막내인 철수는 아메리카노와 카페 라테만 판매하는 카페에서 팀원들의 커피를 사려고 합니다. 아메리카노와 카페 라테의 가격은 차가운 것과 뜨거운 것 상관없이 각각 4500, 5000원입니다. 각 팀원에게 마실 메뉴를 적어달라고 하였고, 그 중에서 메뉴만 적은 팀원의 것은 차가운 것으로 통일하고 "아무거나"를 적은 팀원의 것은 차가운 아메리카노로 통일하기로 하였습니다.
각 직원이 적은 메뉴가 문자열 배열 order로 주어질 때, 카페에서 결제하게 될 금액을 return 하는 solution 함수를 작성해주세요. order의 원소는 아래의 것들만 들어오고, 각각의 의미는 다음과 같습니다.
🙋♀️ 내 생각
제일 처음 문제를 보고, 가격이 2가지이기때문에 2가지경우로 나누어야겠다는 생각이 들었다.
그래서 여러가지 case에 따라서 경우를 나누기 위해서 switch문을 사용했다.
문제를 다 풀고 보니 latte나 americano가 들어간경우로 나누어서 푸는 코드가 훨씬 짧다는 것을 알게 되었다.
내가 switch문을 통해서 문제를 푼 이유는 명시적으로 어떤 경우에는 4500원을 더하고, 어떤 경우에는 5000원을 더하는지를 표현하고 싶어서였다.
그래도 latte나 americano가 있는지를 검사해서 처리하면 더 간단하고 간결한 코드를 만들 수 있다는 장점이 있기때문에 푸는 것도 생각해보면 좋을 것 같다.
✅ 내 코드
function solution(order) {
let result = 0;
for (let i = 0; i < order.length; i++) {
switch (order[i]) {
case "iceamericano":
case "americanoice":
case "hotamericano":
case "americanohot":
case "americano":
case "anything":
result += 4500;
break;
case "icecafelatte":
case "cafelatteice":
case "hotcafelatte":
case "cafelattehot":
case "cafelatte":
result += 5000;
break;
}
}
return result;
}
우선, 값을 더해서 최종값이 나올 변수 result를 선언하고 0으로 초기화해준다.
그럼 다음, switch문을 통해서 식을 검사한다( order[i] ).
case문과 일치하는 경우에만 case문 안의 식을 실행한다. result +=4500
switch문의 인자로 들어가는 식을 검사하는데, order은 배열이기때문에 배열의 요소를 하나하나 검사하기 위해서 for문을 통해서 반복하도록 만든다. ➡️ switch문의 인자로 order[i]를 넣어서 검사하는 값이 order의 요소 하나하나가 되도록 만든다.
americano 나 anything 처럼 4500원은 case들을 적고 만약 해당값이 일치하면 result += 4500 의 식을 실행하게 한다.
만약 일치하면 break를 통해서 switch문을 빠져나갈 것이다.
그런 다음 latte라서 5000원은 더해야하는 값들을 모아서 result += 5000을 하도록 한다.
마지막으로 return result를 통해 최종값을 리턴한다.
💻 다른사람 코드중에 배울 것
const solution = (order) => order.reduce((acc, cur) => acc + (cur.includes('latte') ? 5000 : 4500), 0)
latte가 들어있는지를 검사하고 삼항연산자를 통해서 문제를 해결해서 코드가 매우 간결하다.
실무에서 코드를짤때는 이런 방법도 좋을것같다.
우선, 값을 축적하기위해서 reduce를 사용했다.
그런 다음 현재요소인 cur를 includes를 통해서 latte를 포함하는지를 검사하고, latte를 포함하면 5000을 acc에 더해서 축적시키고, latte가 없으면(americano나 anything인 경우)에는 4500원을 더하도록 한다.
코드가 한줄이지만 이해하기 어렵지 않고 간단하다.
다음에는 이런 방식으로도 풀어봐야겠다고 생각했다.
'JavaScript > 알고리즘' 카테고리의 다른 글
프로그래머스 날짜 비교하기 JS ( if문 / new Date() / 뺄셈 ) (0) | 2023.07.07 |
---|---|
프로그래머스 369게임 JS ( 반복문 사용을 위해 number를 이터러블한 타입으로 변환하기 ) (0) | 2023.07.06 |
프로그래머스 두 개 뽑아서 더하기 JS ( 중첩 for문, Set객체, sort() ) (0) | 2023.07.04 |
프로그래머스 qr code JS ( for문, map() / filter() ) (0) | 2023.07.01 |
프로그래머스 중복된 문자 제거 JS ( set객체, new Set() ) (0) | 2023.07.01 |