새소식

Programmers Coding Test/Java

[프로그래머스 120818] Java - 코딩테스트 입문 / 옷가게 할인 받기

  • -

 

 

옷가게 할인 받기

 

 

 

https://school.programmers.co.kr/learn/courses/30/lessons/120818

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

 

1)  문제

머쓱이네 옷가게는 10만 원 이상 사면 5%, 30만 원 이상 사면 10%, 
50만 원 이상 사면 20%를 할인해줍니다.
구매한 옷의 가격 price가 주어질 때, 지불해야 할 금액을 return 하도록 solution 함수를 완성해보세요.
제한사항
10 ≤ price ≤ 1,000,000
price는 10원 단위로(1의 자리가 0) 주어집니다.
소수점 이하를 버린 정수를 return합니다.

 

 

 

2)  예시

 

 

Result Table
price result
150,000 142,500
580,000 464,000

 

 

 

입출력 예 #1
150,000원에서 5%를 할인한 142,500원을 return 합니다.


입출력 예 #2
580,000원에서 20%를 할인한 464,000원을 return 합니다.

 

 

 

 

 

3)  풀이

 

 

1. 클래스 선언을 해줍니다

● class Solution {

클래스명은 대문자로 시작해야하고, 정답이라는 의미로 Solution이라는 단어를 사용하였습니다.

 

 

 

 

2. 메소드 선언을 해줍니다.

● public int solution(int n) {

정수 n, slice를 매개변수로 사용하는 solution 메소드를 선언해줍니다.

메소드의 결과값인 solution은 정수이 나오므로, 데이터 타입을 int로 해줍니다.

 

 

 

 

3. 가격인 price에 대한 제한사항을 확인하고, 만족하지 않는다면 예외처리합니다.

if (price < 10 || price > 1_000_000) {
            throw new IllegalArgumentException("price는 10 이상 1,000,000 이하여야합니다.");
        }
        

※ 숫자_숫자

일상생활에서 숫자의 천단위를 끊을 경우 ','를 사용하게 됩니다. (예시 : 10,000원)

하지만 java7부터 도입된 기능으로 가시성을 높이기위해 언더바 _를 숫자를 끊어쓰기위해 사용합니다.

예를 들어 10만이라면, 100_000 입니다.

 

 

 

 

 

 

4. if문과 else if문을 사용하여 50만원 이상 구매할 때, 30만원 이상 구매할 때, 10만원 이상 구매할 때, 그외의 경우 

총 4가지 조건에 의해 지불해야할 가격을 totalPayment로 값을 지정합니다.

예를 들어, 50만원 이상 구매할 때 20프로 할인을 받는다는 뜻은 price의 80%가격을 지불하는 것과 동일합니다.

단, 이 때 소수점을 곱해주게되면 실수가 되어버리니 int로 정수 형변환을 해줘야합니다.

 

※ 주의

조건문 순서를 10만원 이상일 때, 30만원 이상일 때, 50만원 이상일 때로 해버리면 10만원 이상일 때 할인 10% 적용해버리고, 이미 조건은 만족시켜버리니 그 이후의 조건문은 발동하지 않습니다. 그래서 50만원 이상을 구매했다고해도, 10만원 이상 조건에서 할인이 적용되어버리니 올바른 가격이 아니게 됩니다.

 

     int totalPayment = 0;


        if (price >= 500_000) {
            totalPayment = (int) (price * 0.8);
        } else if (price >= 300_000) {
            totalPayment = (int) (price * 0.9);
        } else if (price >= 100_000) {
            totalPayment = (int) (price * 0.95);
        } else {
            totalPayment = price;
        }
        return totalPayment;
    }
}

 

 

※ else if란

else if는 else 뒤에 오는 조건이 true일 때만 실행되는 구문입니다. 
여러 개의 조건을 순차적으로 검사하고자 할 때 사용됩니다.

 

if (condition1) {
    // condition1이 true일 때 실행되는 코드
} else if (condition2) {
    // condition1이 false이고 condition2가 true일 때 실행되는 코드
} else if (condition3) {
    // condition1과 condition2가 false이고 condition3이 true일 때 실행되는 코드
} else {
    // 모든 조건이 false일 때 실행되는 코드
}

 

 

 

 

 

 

 

4)  코드

 

class Solution {
    public int solution(int price) {
        if (price < 10 || price > 1_000_000) {
            throw new IllegalArgumentException("price는 10 이상 1,000,000 이하여야합니다.");
        }

        int totalPayment = 0;

        if (price >= 500_000) {
            totalPayment = (int) (price * 0.8);
        } else if (price >= 300_000) {
            totalPayment = (int) (price * 0.9);
        } else if (price >= 100_000) {
            totalPayment = (int) (price * 0.95);
        } else {
            totalPayment = price;
        }
        return totalPayment;
    }
}

 

 

 

 

* 비슷하면서도 다른 풀이방식 (참고용)

class Solution {
    public int solution(int price) {
        if (price < 10 || price > 1_000_000 || price % 10 != 0) {
            throw new IllegalArgumentException("가격은 10 이상 1,000,000 이하이며, 10의 배수여야 합니다.");
        }

        int discountRate = 0;

        if (price >= 500_000) {
            discountRate = 20;
        } else if (price >= 300_000) {
            discountRate = 10;
        } else if (price >= 100_000) {
            discountRate = 5;
        }

        int discountedPrice = price - (price * discountRate / 100);

        return discountedPrice;
    }
}

 

 

 

 

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.