[인프런 워밍업 클럽 0기] BE 5일차 과제

[인프런 워밍업 클럽 0기] BE 5일차 과제

클린 코드

최대한 클린하지 않게 작성된 아래 코드는 다음과 같이 동작합니다.

  • 주어지는 숫자를 하나 받는다.

  • 해당 숫자만큼 주사위를 던져, 각 숫자가 몇 번 나왔는지 알려준다.

public class Main {

    public static void main(String[] args) throws Exception {
        System.out.print("숫자를 입력하세요 : ");
        Scanner scanner = new Scanner(System.in);
        int a = scanner.nextInt();

        int r1 = 0, r2 = 0, r3 = 0, r4 = 0, r5 = 0, r6 = 0;

        for (int i = 0; i < a; i++) {
            double b = Math.random() * 6;
            if (b >= 0 && b < 1) {
                r1++;
            } else if (b >= 1 && b < 2) {
                r2++;
            } else if (b >= 2 && b < 3) {
                r3++;
            } else if (b >= 3 && b < 4) {
                r4++;
            } else if (b >= 4 && b < 5) {
                r5++;
            } else if (b >= 5 && b < 6) {
                r6++;
            }
        }

        System.out.printf("1은 %d번 나왔습니다.\n", r1);
        System.out.printf("2은 %d번 나왔습니다.\n", r2);
        System.out.printf("3은 %d번 나왔습니다.\n", r3);
        System.out.printf("4은 %d번 나왔습니다.\n", r4);
        System.out.printf("5은 %d번 나왔습니다.\n", r5);
        System.out.printf("6은 %d번 나왔습니다.\n", r6);
    }
}

풀이

복잡하지 않아 굳이 나누지 않았습니다.

public static void main(String[] args) {
    // 사용자로부터 숫자 입력 받기
    System.out.print("숫자를 입력하세요 : ");
    Scanner scanner = new Scanner(System.in);
    int numberOfThrows = scanner.nextInt();

    // 주사위 던지기 결과를 저장할 배열
    int[] diceResults = new int[6];

    // 주사위를 numberOfThrows만큼 던지고 결과를 기록
    for (int i = 0; i < numberOfThrows; i++) {
        int randomNumber = (int) (Math.random() * 6);
        diceResults[randomNumber]++;
    }

    // 주사위 던지기 결과 출력
    for (int i = 0; i < 6; i++) {
        System.out.printf("%d은(는) %d번 나왔습니다.\n", i + 1, diceResults[i]);
    }
}

한 걸음 더!

현재 코드는 주사위가 1~6까지만 있다는 가정으로 작성되어 있습니다.

따라서 주사위가 1~12까지 있거나 1~20까지 있다면 코드를 많이 수정해야 하죠!

 

위의 코드를 클린하게 개선해 보았다면, 주사위의 숫자 범위가 달라지더라도 코드를 적게 수정할 수 있도 록 고민해 봅시다!


public static void main(String[] args) {
        // 사용자로부터 숫자 입력 받기
        System.out.print("주사위를 던질 숫자를 입력하세요 : ");
        System.out.print("주사위의 최댓값을 입력하세요 : ");
        Scanner scanner = new Scanner(System.in);
        int numberOfThrows = scanner.nextInt();
        int diceMaxNumber = scanner.nextInt();

        // 주사위 던지기 결과를 저장할 배열
        int[] diceResults = new int[6];

        // 주사위를 numberOfThrows만큼 던지고 결과를 기록
        for (int i = 0; i < numberOfThrows; i++) {
            int randomNumber = (int) (Math.random() * diceMaxNumber);
            diceResults[randomNumber]++;
        }

        // 주사위 던지기 결과 출력
        for (int i = 0; i < diceMaxNumber; i++) {
            System.out.printf("%d은(는) %d번 나왔습니다.\n", i + 1, diceResults[i]);
        }
    }

 

 

 

 

 

 

 

댓글을 작성해보세요.

채널톡 아이콘