IT·테크/개발

Project Euler 004 알고리즘 문제 Java

레루루 2026. 7. 29. 23:06
반응형

세 자리수 두 개를 곱해 만들 수 있는 최대 대칭수를 찾는 문제입니다.


대칭수는 양 끝에서 좁혀 오며 확인합니다

곱한 결과를 문자열로 바꾼 뒤 배열로 쪼개고, 인덱스를 양 끝(k는 앞에서, l은 뒤에서)에 두고 가운데를 향해 좁혀 오면서 문자를 비교합니다. 한 번이라도 다르면 대칭이 아니므로 즉시 중단합니다.

package euler;

public class Euler004 {
    public static void main(String[] args) {
        //세 자리수 두 개를 곱해서 만들 수 있는 최대 대칭수
        int result =0;
        int max =0;
        //세 자리수 곱하기 반복문 시작
        for (int i = 999; i >99 ; i--) {
            for (int j = 999; j >99; j--) {
                //곱 결과 저장
                result = i*j;
                //곱 결과 값을 문자열로 변환
                String strResult = String.valueOf(result);
                //변환한 문자열을 하나씩 잘라서 배열에 저장
                String[] value = strResult.split("");

                //플래그 변수들
                boolean run = false;
                boolean flag = true;

                //대칭 비교용 배열 인덱스 변수
                int k = 0;
                int l = value.length-1;

                //양 끝에서부터 값을 비교
                while(flag) {
                    if ( value[k].equals(value[l]) ) {
                        run = true;
                        k++;
                        l--;
                        if (k == value.length) {
                            flag = false;
                        }
                    } else {
                        run = false;
                        flag = false;

                    }
                }

                if( run == true ) {
                    System.out.print(i + " x ");
                    System.out.print(j + " = ");
                    System.out.println(result);
                    break;
                }
            }
            if(result >= max) {
                max = result;
            }
        }
        System.out.println(max);
    }
}
반응형