문제 설명
하나의 long 정수 n이 주어졌을 때, 홀수 인덱스(위치)에 있는 숫자들의 합과 짝수 인덱스에 있는 숫자들의 합의 차이가 0인지 아닌지를 판별하는 프로그램을 작성합니다. 이때 인덱스는 0부터 시작합니다.
예시
n = 1212112 홀수 위치 요소의 합 = 2 + 2 + 1 = 5 짝수 위치 요소의 합 = 1 + 1 + 1 + 2 = 5 차이 = 5 - 5 = 0 출력 = Yes
자바(Java) 구현 예제
다음은 위 문제를 해결하기 위해 작성한 자바 프로그램입니다.
class JavaTester {
public static int difference(int n){
return (n % 11);
}
public static void main(String args[]){
int n = 1212112;
System.out.println("Number: " + n);
System.out.println(difference(n) == 0 ? "Yes" : "No");
n = 12121121;
System.out.println("Number: " + n);
System.out.println(difference(n) == 0 ? "Yes" : "No");
}
}실행 결과
Number : 1212112 Output: Yes Number : 12121121 Output: No
핵심 원리: 11의 배수 판정법
위 코드에서 가장 눈여겨볼 부분은 복잡한 반복문 없이 단순히 n % 11만 반환한다는 점입니다. 이것이 가능한 이유는 수학의 '11의 배수 판정법' 때문입니다. 어떤 수의 자릿값을 오른쪽부터 교대로 더하고 빼았을 때 그 결과가 0 또는 11의 배수라면, 해당 수는 11의 배수입니다. 즉, 홀수 자리 숫자의 합과 짝수 자리 숫자의 합의 차이가 0이라는 조건은 곧 그 수가 11로 나누어떨어진다는 것과 동일한 의미이므로, 나머지 연산 하나만으로도 손쉽게 판별할 수 있습니다.