프로그래머스 코딩테스트

[프로그래머스] 옷가게 할인 받기

2023. 6. 9. 10:25
목차
  1. 문제 설명 
  2. 제한사항 
  3. 풀이

문제 설명 

머쓱이네 옷가게는 10만 원 이상 사면 5%, 30만 원 이상 사면 10%, 50만 원 이상 사면 20%를 할인해줍니다. 구매한 옷의 가격 price가 주어질 때, 지불해야 할 금액을 return 하도록 solution 함수를 완성해보세요.
 

제한사항 

10 ≤ price ≤ 1,000,000 price는 10원 단위로(1의 자리가 0) 주어집니다. 소수점 이하를 버린 정수를 return합니다.
 

풀이

주어진 값을 조건에 따라 할인하고 그 값을 리턴해주면 되는것 같다.
 

삼항 연산자 사용
const solution = (price) => 
    price >= 500000 // 50만원 이상일 때
    ? Math.trunc(price * 0.8) // 원 가격의 80% (20% 할인)
    : price >= 300000 // 30만원 이상일 때
    ? Math.trunc(price * 0.9) // 원 가격의 90% (10% 할인)
    : price >= 100000 // 10만원 이상일 때
    ? Math.trunc(price * 0.95) // 원 가격의 95% (5% 할인)
    : price; // 10만원 미만일때 할인 없음


삼항 연산자 미사용1 (if문 사용)
const solution = (price) => {
    if(price >= 500000){ // 50만원 이상일 때
    	return Math.trunc(price * 0.8); // 원 가격의 80% (20% 할인)
    }else if(price >= 300000){ // 30만원 이상일 때
    	return Math.trunc(price * 0.9); // 원 가격의 90% (10% 할인)
    }else if(price >= 100000){ // 10만원 이상일 때
    	return Math.trunc(price * 0.95) // 원 가격의 95% (5% 할인)
    }else{
    	return price; // 10만원 미만일때 할인 없음
    }
}

삼항 연산자 미사용2 (if문 중괄호 미사용)
const solution = (price) => {
    if(price >= 500000) return Math.trunc(price * 0.8);
    else if(price >= 300000) return Math.trunc(price * 0.9);
    else if(price >= 100000) return Math.trunc(price * 0.95);
    else return price;
}

스위치문 사용
const solution = (price) => {
  switch (true) {
    case price >= 500000: return Math.trunc(price * 0.8);
    case price >= 300000: return Math.trunc(price * 0.9);
    case price >= 100000: return Math.trunc(price * 0.95);
    default: return price;
  }
};

 
딱히 주의 할 점은 없고 코드 작성에 대해서 4가지 케이스를 써보았다.
나는 삼항연산자를 주로 쓰는편인데, 개인 판단으로 가독성이 높다고 생각되는 쪽으로 사용하면 될듯.
 
if문 같은경우엔 수식이 짧은데 반해 매번 return 을 해줘야 해서 좀 그르타.
 
참고로 스위치문은 조건과 일치하는 블럭에서 실행이 일어나기 때문에
조건에 비교연산자를 사용 할 수 없다.

더보기

** 참고

switch 문의 case 절에는 일반적으로 비교 연산자를 직접 사용할 수 없다.

case 절에는 단순한 값이나 상수만이 올 수 있으며, 비교 연산자를 직접 사용할 수 없는 제약이 있다.

 

하지만 JavaScript에서는 switch 문에 true를 전달하여 조건에 따라 분기할 수 있다.

이를 이용하여 조건을 확인하고 case 절에 true 또는 false 값을 사용하여 코드를 작성할 수 있다.

이 방식은 특정 상황에서는 유용할 수 있지만, 코드의 가독성과 유지 보수성을 고려할 때는

if-else 문을 사용하는 것이 좋다.

 
이상, 이하, 초과, 미만에 대한 부등호만 신경 잘 써주면 될꺼 같고
소수점을 버리는 Math.trunc()를 활용했다.
 
Math.floor 혹은 parseInt 등을 사용할 수도 있을것 같다.
단 parseInt 의 경우 숫자가 굉장히 큰 경우엔 제대로 동작하지 않는다.
그리고 Math.floor은 내림이기 때문에, -5.4 등과 같은 음수 값이 나올때
-6이 되버리므로 제한사항을 잘 확인하고 주어지는 값이 양수인 경우에만 사용하자.

저작자표시 (새창열림)
  1. 문제 설명 
  2. 제한사항 
  3. 풀이
'프로그래머스 코딩테스트' 카테고리의 다른 글
  • [프로그래머스] 순서쌍의 개수
  • [프로그래머스] 세균증식
  • [프로그래머스] 공 던지기
  • [프로그래머스] 치킨 쿠폰
FE Dev. 은옥
FE Dev. 은옥
프론트엔드 개발자의 소소한 블로그
FE Dev. 은옥
Web dev!
FE Dev. 은옥
전체
오늘
어제
  • WEB (116)
    • Javascript (14)
    • Nest.JS (2)
    • 프로그래머스 코딩테스트 (67)
    • 튜토리얼 (28)
    • 작업물 (4)
    • 독서록 (1)

최근 글

인기 글

hELLO · Designed By 정상우.
FE Dev. 은옥
[프로그래머스] 옷가게 할인 받기
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.