코틀린/코딩테스트

코딩테스트 [옷가게 할인 받기]

정혜현 2024. 6. 11. 10:05

문제

머쓱이네 옷가게는 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
    }
}

 

 


회고

타입 추측하기 : 입출력 타입을 매치할 수 있도록 단계에 따라 어느 타입일지 생각하면서 작성하기