- americano(ice/hot) : 4500
- cafelatte(ice/hot) : 5000
- 메뉴만 적으면 ice americano (4500) or ice cafelatte (5000)
- 아무거나(anything)이면 아이스 아메리카노 (4500)
- 인자는 string 배열
- return 값은 number
쉬운 문제였다! 그러나 +1점 밖에 획득하지 못했는데 ... 왜일까 ?
for
문은 아무래도 시간 over 가 되서 그런걸까 ?
좀 더 다른 메서드를 응용하여 풀어야 성능이 높아지나 ?!
function solution(o) {
let priceToPay = 0;
for (let el of o) {
el.includes('americano') || el.includes('anything') ?
priceToPay += 4500 : priceToPay += 5000
}
return priceToPay;
}
일단 나는 for of
문을 썼다.
처음에는 for
문으로 풀었는데, for of
가 좀 더 시간을 단축시켜줄줄 알고, 바꾸었다. (아니였나 ㅜ_ㅜ)
const solution = (o) =>
o.reduce((acc, cur) => acc + (cur.includes('cafelatte') ? 5000 : 4500), 0)
다른 사람의 풀이 중, 이게 가장 짧고 메서드도 하나만 사용해서 가져와보았다.
배열 메서드인 reduce
를 사용했다.
첫번째 인자 acc
은 값이 누적되어 할당되는 accumulator
이고, cur
은 배열 내 현재요소(currentValue
)를 가리킨다.
맨 끝에 0
은 initialValue
자리로, acc
의 초기값을 설정해주는 곳이다.
cur
(현재요소)에 'cafelatte'
라는 string
이 포함되어 있으면, 5000원
, 아니면 나머지 다 4500원
이다.
저 연산에 따라 acc
에 숫자가 누적되며 할당된다 ( = 계속 더해진다 )
그럼 올바른 값이 나온다.
reduce
를 자주 사용해 보아야겠다 👍🏻
function solution(o) {
let priceToPay = 0;
for (let i = 0; i < o.length; i++) {
o[i].includes('cafelatte') ?
priceToPay += 5000 : priceToPay += 4500
}
return priceToPay;
}
원래 풀었었던 for
문으로 다시 리팩토링 ..
그리고 사실 'cafelatte'
만 금액이 다르기 때문에, 'cafelatte'
로만 조건을 걸어주면 되었다.
코드 더 단축~!
오늘 끗!