관리 메뉴

밤색모자이크의 개발이야기

Project Euler Problem 4 : 세자리 수를 곱해 만들 수 있는 가장 큰 대칭수 본문

Algorithm/Project Euler

Project Euler Problem 4 : 세자리 수를 곱해 만들 수 있는 가장 큰 대칭수

밤색모자이크 2017. 6. 18. 21:38


Project Euler 문제를 해답을 포스팅합니다.

※ 주의 : 최적화는 할 수 있는 만큼했습니다. 따라서 속도면에서는 많이 부족합니다.

           문제를 푸는데 목표를 두었고 또한 TDD를 최대한 활용하였습니다.

           몇가지 문제의 경우 TDD를 안한 경우도 있습니다.

           혹시, 최적화 또는 속도 증가에 대한 부분을 지적해주실 분은 너무나도 감사합니다.



Project Euler Problem 4


앞에서부터 읽을 때나 뒤에서부터 읽을 때나 모양이 같은 수를 대칭수(palindrome)라고 부릅니다.

두 자리 수를 곱해 만들 수 있는 대칭수 중 가장 큰 수는 9009 (= 91 × 99) 입니다.

세 자리 수를 곱해 만들 수 있는 가장 큰 대칭수는 얼마입니까?








Source Code


Class TestClass Code

public class TestClass { 
     
    @Test 
    public void testFirst() {
         
        PalindromeInspector inspector = new PalindromeInspector();
         
        Integer testNum = 1991; 
        Integer testNum2 = 1188; 
         
        assertTrue(inspector.inspecte(testNum.toString())); 
        assertFalse(inspector.inspecte(testNum2.toString())); 
    } 
} 


Class PalindromeInspector Code

public class PalindromeInspector {

    public boolean inspecte(String string) {
         
        for(int i=0; i<string.length()/2; i++)
            if(string.charAt(i) != string.charAt(string.length() - i - 1))
                return false;
         
        return true; 
    } 
     
}

Class Main Code
public class Main { 
    public static void main(String [] args) {
         
        int maxNum = 0; 
        PalindromeInspector inspector = new PalindromeInspector();
         
        for(int frontNum=100; frontNum<1000; frontNum++) { 
            for(int tailNum=100; tailNum<1000; tailNum++) { 
                Integer testNum = frontNum * tailNum; 
                 
                if(inspector.inspecte(testNum.toString())) { 
                    if(maxNum < testNum) 
                        maxNum = testNum; 
                } 
            }//end of tailNum 
        }//end of frontNum 
         
        System.out.println(maxNum); 
    } 
}




Comments