마법의 숫자 판별기 리팩토링 정리(코드트리)

먼치즈·2025년 7월 1일
0

범위 [A, B] 사이의 숫자 중에서

  • 3의 배수이거나
  • 각 자리 숫자 중 3, 6, 9 중 하나라도 포함된 수

를 "마법의 숫자"로 판단하고, 그 개수를 세는 문제이다.


리팩토링 전 코드

public static boolean isMagicNum(int i){
    int cnt=0;
    int n=i;
    int[] arr= new int[3];
    arr=new int[]{3,6,9};
    if(i%3==0){
        return true;
    }
    while(i>0){
        int num;
        num=i%10;
        for(int k=0;k<arr.length;k++){
            if(num==arr[k]){return true;}
        }
        i/=10;
    }
    return false;
}

문제점

  • 배열 선언이 불필요하게 중복됨 (new int[3] → 즉시 덮어쓰기)
  • 반복문으로 3, 6, 9 체크하는 것보다 || 연산이 더 직관적임
  • 가독성이 떨어지고 로직이 장황함

리팩토링 후 코드

public static boolean isMagicNum(int i){
    if (i % 3 == 0) return true;

    while(i > 0){
        int digit = i % 10;
        if (digit == 3 || digit == 6 || digit == 9) return true;
        i /= 10;
    }

    return false;
}

개선점 요약

항목리팩토링 전리팩토링 후
3,6,9 비교배열 반복`digit == 3
배열 선언arr=new int[3]; + {3,6,9}제거
조건 순서아래에서 검사조기 리턴 (i % 3 == 0)
변수명numdigit (의미 명확)

profile
먼치즈의 개발 벨로그입니다:)

0개의 댓글