생각, 고민, 문제해결의 기록

[프로그래머스] Lv. 0 - 할인가격 구하기 본문

알고리즘 문제풀이/프로그래머스

[프로그래머스] Lv. 0 - 할인가격 구하기

김예티 2023. 1. 30. 20:27

문제 설명

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


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

입출력 예

price result
150,000 142,500
580,000 464,000
입출력 예 설명

입출력 예 #1

  • 150,000원에서 5%를 할인한 142,500원을 return 합니다.

입출력 예 #2

  • 580,000원에서 20%를 할인한 464,000원을 return 합니다.

나의 풀이

func solution(_ price:Int) -> Int {
    switch price {
        case 100000..<300000:
        return Int(Double(price) * 0.95)
        case 300000..<500000:
        return Int(Double(price) * 0.9)
        case 500000...:
        return Int(Double(price) * 0.8)
        default:
        return price
    }
}

처음에 if문을 사용해 코드를 짜다가 테스트케이스에서 자꾸 통과가 되지 않길래 switch문으로 바꿨더니 통과되었고 switch문이 가격 범위도 훨씬 직관적으로 보였다.
할인율 계산은 처음에 5% -> 0.05 이런식으로 바꿨는데 그렇게 되면 바꿔준 소수에 원가를 곱하고 또 그값을 원가로 빼고..... 암튼 계산이 길어지고 코드도 더 길어진다. 1에서 바꿔준 소수만큼 빼주고 그 값을 바로 값에 곱하면 할인가격을 알 수 있는걸 알았다!!!

같은 타입끼리 연산해야하기 때문에 Double(price)도 필수.