• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    해결됨

Quiz 4에서 강사님이 작성하신 if문과 달리 case문으로 작성해보았는데 피드백 부탁드립니다.

23.03.11 14:06 작성 조회수 595

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

Ambition님의 프로필

Ambition

질문자

2023.03.11

아 정정합니다. for문으로 돌리면 시간복잡도가 늘어나게 되니까 강사님처럼 hour를 변수로 두고, fee = hour * 4000; 으로 하는게 바람직한 것 같습니다.