문제
머쓱이네 옷가게는 10만 원 이상 사면 5%, 30만 원 이상 사면 10%, 50만 원 이상 사면 20%를 할인해줍니다.
구매한 옷의 가격 price가 주어질 때, 지불해야 할 금액을 return 하도록 solution 함수를 완성해보세요.
https://school.programmers.co.kr/learn/courses/30/lessons/120818
풀이
1. 접근
1.1 관찰
금액당 할인 비율은 10만원이상 : 5%, 30만원이상 : 10%, 50만원이상 20%. 금액 n일 때 할인비율x를 구해야한다.
n * 할인율 / 100으로 할인받은 금액을 구한다. 소수점 이하는 버린 정수를 반환한다.
1.2 준비
- 금액에 따라 조건 나누기
10만원~29만원 -> 5%
3만원~49만원 -> 10%
50만원이상 -> 20%
- 필요한 코드 생각하기
조건문 : when
정수로 반환 : toInt()
2. 시행착오
2.1 시도
- 가설 : when문으로 3가지 조건에 따른 할인금액을 구하고 정수형으로 변환하면 될 것이다.
class Solution {
fun solution(price: Int): Int {
var answer: Int = 0
answer = when {
price >= 10 && price <= 29 -> (price * 0.95).toInt()
price >= 30 && price <= 49 -> (price * 0.9).toInt()
price >= 50 -> (price * 0.5).toInt()
}
return answer
}
}
- 검증 : 실패
/Solution.kt:4:18: error: 'when' expression must be exhaustive, add necessary 'else' branch
answer = when {
^
에러 : 조건문은 철저히 작성해야하기 때문에 예외처리가 필요하다는 에러
그리고 금액도 잘못 적었다. 만원단위로 수정하고 예외도 넣어서 수정해보자.
class Solution {
fun solution(price: Int): Int {
var answer: Int = 0
answer = when {
price in 100000..290000 -> (price * 0.95).toInt()
price in 300000..490000 -> (price * 0.9).toInt()
price >= 500000 -> (price * 0.8).toInt()
else -> price
}
return answer
}
}
- 검증 : 성공
https://hhyun-s2.tistory.com/38 에서 when문에는 비교연산자를 사용할 수 없는 줄 알았는데 그게 아니라 when 옆에 ()조건이 있으면 true/false로 떨어져야하기 때문에 비교연산자를 쓸 수 없는 것이었다. 조건을 없애면 사용 가능하다.
링크 본문도 첨언했다.
class Solution {
fun solution(price: Int): Int {
var answer: Int = 0
answer = when {
price >= 100000 && price <= 290000 -> (price * 0.95).toInt()
price >= 300000 && price <= 490000 -> (price * 0.9).toInt()
price >= 500000 -> (price * 0.8).toInt()
else -> price
}
return answer
}
}
회고
타입 추측하기 : 입출력 타입을 매치할 수 있도록 단계에 따라 어느 타입일지 생각하면서 작성하기
'코틀린 > 코딩테스트' 카테고리의 다른 글
코딩테스트 [머쓱이보다 키 큰 사람] (0) | 2024.06.12 |
---|---|
코딩테스트 [중복된 숫자 개수] (0) | 2024.06.12 |
코딩테스트 [피자 나눠먹기(1)] (0) | 2024.06.11 |
코딩테스트 [배열의 평균값] (0) | 2024.06.11 |
코딩테스트 [배열 두배 만들기] (0) | 2024.06.07 |