[js] 커피 심부름 (lv.0, 정답률 83%)

sookyoung.k·2024년 4월 21일
0
post-thumbnail

팀의 막내인 철수는 아메리카노와 카페 라테만 판매하는 카페에서 팀원들의 커피를 사려고 합니다. 아메리카노와 카페 라테의 가격은 차가운 것과 뜨거운 것 상관없이 각각 4500, 5000원입니다. 각 팀원에게 마실 메뉴를 적어달라고 하였고, 그 중에서 메뉴만 적은 팀원의 것은 차가운 것으로 통일하고 "아무거나"를 적은 팀원의 것은 차가운 아메리카노로 통일하기로 하였습니다.

각 직원이 적은 메뉴가 문자열 배열 order로 주어질 때, 카페에서 결제하게 될 금액을 return 하는 solution 함수를 작성해주세요. order의 원소는 아래의 것들만 들어오고, 각각의 의미는 다음과 같습니다.

order의 원소의미
"iceamericano", "americanoice"차가운 아메리카노
"hotamericano", "americanohot"따뜻한 아메리카노
"icecafelatte", "cafelatteice"차가운 카페 라테
"hotcafelatte", "cafelattehot"따뜻한 카페 라테
"americano"아메리카노
"cafelatte"카페 라테
"anything"아무거나

제한사항
-1 ≤ order의 길이 ≤ 1,000

나의 풀이

function solution(order) {
    let reg = /cafelatte/g;
    let latteCnt = 0;
    for (let i = 0; i < order.length; i++) {
        if (order[i].match(reg)) {
             latteCnt++;
        }
    }
    return latteCnt * 5000 + (order.length - latteCnt) * 4500;
}

주문으로 들어온 배열 중 'cafelatte'라는 글자가 있으면 핫/아이스 구분 없이 라떼 5000원이고, 나머지는 무조건 아메리카노 45000원이기 때문에 라떼라는 글자의 유무로 계산을 하기로 했다.

latteCnt라는 변수를 0으로 초기화하여 여기에 라떼 주문 개수를 카운트하기로 했다.
그리고 caffelatte라는 글자가 들어가는 요소를 찾기 위해 정규표현식을 사용하여 for문을 돌며 match() 메서드를 사용해 확인될 경우 latteCnt를 올려줬다.

그리고 최종적으로 latteCnt를 통해 라떼 값을 계산하고, order 배열의 크기에서 라떼 주문 수를 빼서 아메리카노 값을 계산한 후 더해 최종 가격을 구했다.

다른 풀이 1

const solution = (order) => order.reduce((acc, cur) => acc + (cur.includes('latte') ? 5000 : 4500), 0)

헉... 이것도 누적 값이니까 reduce를 쓸 수 있구나...! 초기 값을 o으로 주고 배열을 돌며 현재 요소가 'latte'라는 글자를 포함할 경우 5000원, 아닐경우 4500으로 줘서 더해준다.

다른 풀이 2

function solution(order) {
  return order.reduce((acc, cur) => {
    if (cur.includes("americano")) {
      return acc + 4500;
    } else if (cur.includes("cafelatte")) {
      return acc + 5000;
    } else {
      return acc + 4500;
    }
  }, 0);
}

여기도 reduce를 사용해서 더해줌.

그래요... 사실 전...

includes를 몰라서 정규표현식을 썼읍니다...

profile
영차영차 😎

2개의 댓글

comment-user-thumbnail
2024년 4월 22일

안녕하세요! 혹시 뉴딜 일자리 질문좀 드려도될까요! 이메일 보냈습니당 좋은하루보내세요!

답글 달기
comment-user-thumbnail
2024년 4월 22일

안녕하세요! 혹시 뉴딜 일자리 질문좀 드려도될까요! 이메일 보냈습니당 좋은하루보내세요!

답글 달기