해결된 질문
작성
·
658
0
package chap_04;
public class _Quiz_04 {
public static void main(String[] args) {
int car = 3;
int fee = 0; // 시간당 4000원이므로 초기값을 0으로 저장하자
int max = 30000;
// 케이스가 명확하므로 switch문을 작성하는게 맞는데, 시간을 어떻게 반복?
switch (car)
{
case 1: // 일반 차량의 경우
for (int i = 1; i <= 5; i++) {
fee += 4000; // 팩토리얼 계산을 때려버림....
}
System.out.println("주차 요금은 " + fee + " 원입니다.");
break;
case 2:
for (int i = 1; i <= 5; i++) {
fee += 4000;
}
fee /= 2; // 최종 요금에서 50% 할인
System.out.println("주차 요금은 " + fee + " 원입니다.");
break;
case 3:
for (int i = 1; i <= 10; i++) {
fee += 4000;
if(fee > max) // fee가 최대 요금을 넘어가면
fee = max; // 최대 요금을 fee로 고정
}
fee /= 2; // 최종 요금에서 50% 할인
System.out.println("주차 요금은 " + fee + " 원입니다.");
}
}
}
// 일반 차량일 경우
// 경차일 경우
// 장애인 차량일 경우
저같은 경우, 케이스가 일반 차량, 경차, 장애인 차량으로 명확해서 case문으로 작성하였고, 시간당 4000원이라고 하여서 fee = 0 으로 먼저 초기화한 다음, 시간을 for문으로 돌려서 계산을 하였는데요. 이렇게 switch-case문 안에 for문을 작성해도 괜찮나요??
답변 2
1
안녕하세요?
네, SwitchCase 문 내에서 for 반복문을 사용하는 것은 문제 없습니다. 코드를 보니 시간에 따른 계산을 어떻게 할지 고민하셨던 것 같아요. 일반 차량, 경차, 장애인 차량은 명확하므로 SwitchCase 로 접근하여 계산법을 다르게 하는 것은 좋은 접근 방법입니다. 다만 답글 적어주신 것처럼 시간 정보는 가변적이므로 시간을 담기 위한 변수를 외부에 따로 둔 다음에 간단히 4000 원만 곱하는 식으로 처리하는 게 좋겠습니다.
fee = hour * 4000;
그러면 SwitchCase 내부에 여러 번 반복되는 불필요한 코드를 줄일 수 있을 것 같구요. 또한 경차 / 장애인 차량의 경우 적용되는 로직이 같으므로 case 를 통합해도 좋겠습니다. 처음 코드를 다음과 같이 바꿔봤는데 참고해주시면 좋겠습니다 😊
package chap_04;
public class _Quiz_04 {
public static void main(String[] args) {
int car = 1;
int fee = 0;
int max = 30000;
int hour = 5; // 주차시간 : 5 또는 10 등 자유롭게 설정
switch (car)
{
case 1: // 일반 차량
fee = hour * 4000;
if(fee > max)
fee = max;
break;
case 2: // 경차
case 3: // 장애인 차량
fee = hour * 4000;
if(fee > max)
fee = max;
fee /= 2;
break;
}
System.out.println("주차 요금은 " + fee + " 원입니다.");
}
}
감사합니다.
0
아 정정합니다. for문으로 돌리면 시간복잡도가 늘어나게 되니까 강사님처럼 hour를 변수로 두고, fee = hour * 4000;
으로 하는게 바람직한 것 같습니다.