주말이라 편하게 쉬었다. 운동도 오늘만큼은 쉬지만 밀린 집안일을 하고 세차도하느라 평소보다 더 많이 움직인듯 하다. 일부러 쿠팡으로 장보지 않고 트레이더스에 가서 맛있는것도 사먹고 행복한 주말이다. 그래도 저녁에 돌아와서 문제나 풀까 하면서 하나라도 해보려고 했다. 하루 정도는 푹 쉬는 패턴이 좋다~~
옷가게 포스기에서 볼법한 프로그램이다. 가격별로 할인이 적용되도록 구성해야 하는데, 처음에 input부분에서 모두 해결하려고 하니 복잡해서 다시한번 연산 메서드calculator(){}로 넘겨서 좀 더 편하게 작업 할 수 있었다. 단순히 출력하는 것보다 실제로 마트같은데서 사용하는 포스기가 이런 방식의 프로그램이 들어간건가 궁금하긴 하다.
1. Main.java
package Algorithm11;
public class Main {
public static void main(String[] args) {
Solution solution = new Solution();
solution.inputPrice();
}
}
Java
복사
2. Solution.java
연산은 특별히 어렵지 않았다. 나열된 조건에 실수만 하지 않으면 잘 작동한다. 작성해놓고 나니 좀 더 간략하게 작성하는 방법은 없을까? 처음에 input price를 할 때 조건은 아니었지만 첫째자리를 0으로 입력한다 했는데, 내가 이 부분을 컨트롤 하고 싶었는데 입력하는 값이 매번 다르고 substring으로 뭔가 하면 될 것 같았는데 실패했다. 이런 부분을 해결하는 함수가 분명히 있을 것 같은데 찾아봐야겠다.
package Algorithm11;
import java.util.Scanner;
public class Solution {
//옷가게 할인 받기
//문제 설명
//int price 옷 가격 input scanner
//int bill 결제 금액 outputBill(){}
//머쓱이네 옷가게는 10만 원 이상 사면 5%, 30만 원 이상 사면 10%, 50만 원 이상 사면 20%를 할인해줍니다.
//구매한 옷의 가격 price가 주어질 때, 지불해야 할 금액을 return 하도록 solution 함수를 완성해보세요.
//
//제한사항
//10 ≤ price ≤ 1,000,000
//price는 10원 단위로(1의 자리가 0) 주어집니다.
//소수점 이하를 버린 정수를 return합니다. Math
double price;
double discount5 = 0.95;
double discount10 = 0.90;
double discount20 = 0.80;
String dcFlag;
int bill;
int dcDifferbill;
Scanner sc = new Scanner(System.in);
public Solution() {
//기본성생저
}
void inputPrice() {
while (true) {
System.out.println("옷 가격을 입력해주세요.");
//10 ≤ price ≤ 1,000,000
price = sc.nextInt();
if (price < 10 || price > 1000000) {
System.out.println("금액은 10원~100만원 범위로 입력해주세요.");
continue;
}
System.out.println(price);
calculate(price);
break;
}
}
//price는 10원 단위로(1의 자리가 0) 주어집니다.
//소수점 이하를 버린 정수를 return합니다. Math
void calculate(double price) {
if (price >= 100000 && price < 300000) {
bill = (int)(discount5 * this.price);
dcFlag = "5%";
dcDifferbill = (int)this.price - bill;
} else if (price >= 300000 && price < 500000) {
bill = (int)(discount10 * this.price);
dcFlag = "10%";
dcDifferbill = (int)this.price - bill;
} else if (price >= 500000) {
bill = (int)(Math.floor(discount20 * this.price));
dcFlag = "20%";
dcDifferbill = (int)this.price - bill;
}else{
dcFlag = "0";
bill = (int)price;
}
System.out.println(bill);
outputBill(bill, dcFlag, dcDifferbill);
}
void outputBill(int bill, String dcFlag, int dcDifferbill) {
if (dcFlag == "0"){
System.out.printf("해당 상품은 추가 할인이 없으며 결제하실 금액은 %,d원 입니다.",bill);
}else {
System.out.printf("주문하신 상품은 %s할인이 적용되어\n할인 금액은 %,d원이며\n 결제하실 금액은 %,d입니다.", dcFlag,dcDifferbill,bill);
}
}
}
Java
복사