알고리즘 & 자료구조/수학1

[백준]10430번 - 나머지(JAVA)

윤도ri 2022. 4. 21. 17:25

 | 문제

| 해결 

 

이 문제는 사실 출력만 하는거라 어렵지 않았다.  출력방법은 Scanner, BufferedReader 둘 중 하나를 사용하여 해주면 될것 같다.  

 

*주의할 점 

1. 한 줄에 한 개의 결과값을 출력해야 한다.

2. 나머지를 구해야하므로 변수를 int로 계산해야 한다.

 


먼저, 코드를 적기전에 왜 각각 두개의 식들이 같은지 증명을 하고 이해하면 좋을것 같아서 정리해보게 되었다.

위와같이 나머지와 연관된 식들을 모듈로 연산이라고 한다.

 

| 모듈로 연산(Modulo Operation)

- 어떤 한 숫자를 다른 숫자로 나눈 나머지를 구하는 연산으로, 나머지 연산(mod)이라고 한다.

- A mod B 와 같은 형태로 표현한다. ( A % B = A mod B)

 

문제에서는  총 4개의 케이스가 나왔다.

  1. (A+B) %C 
  2. (A%C + B%C)%C 
  3. (A*B)%C 
  4. (A%C * B%C)%C 

 1과 2의 케이스의 결과값이 같으며 3과 4의 결과값이 같다.  이것은 모듈로 사칙 연산의 대표적인 속성을 보여준다. 

이제부터 이 두가지를 증명해보겠다. 

 

| (A+B) %C  = (A%C + B%C)%C 

 A mod C = T

 B mod C = F

 

 A = T + iC  (i는 임의의 정수) 

 B = F + jC  (j는 임의의 정수) 

 

(A+B) mod C = ( (T+iC) + (F+jC) ) mod C

                  = ( (T+F) + ( i+j )C ) mod C

                  = ( T+F ) mod C  

                  = ( (A mod C) + (B mod C) ) mod C 

 

위의 식으로 증명할 수 있는데 하나 하나 예를 들어 설명해보겠다. 아래와 같이 두개의 식이 있다고 해보자.

 

1) 10/3= 3..1 ( 10 mod 3 = 1)

2) 8/3= 2..2   ( 8 mod 3 = 2)

 

두개의 식은 결국 아래의 두개의 식과 동일하다.

1)10= 1 + 3*3 

2) 8=  2 + 3*2 

 

(10+8) mod 3 = ( (1+3*3) + (2+3*2) ) mod 3

                  = ( (1+2) + ( 3+2 )3 ) mod 3 

                  = ( 1+2 ) mod C  

                  = ( (1 mod 3) + (8 mod 3) ) mod 3 

 

여기서 (3+2)3 은 3의 배수이므로 mod 3 식을 만나면 무조건 나머지가 0 이 된다. 이 말은 즉 나머지를 구하는데 있어 (3+2)3 은 어떠한 영향력도 끼치지 않는다는 것이다. 그러므로  (1+2) 로 식을 줄일 수 있다. 결국 1 과 2 는 (1 mod 3) + (8 mod 3) 이므로 (A+B) %C  = (A%C + B%C)%C 의 식을 증명한다는 것을 보여준다.

 

 

| (A*B) %C  = (A%C * B%C)%C 

A mod C = T

 B mod C = F

 

 A = T + iC  (i는 임의의 정수) 

 B = F + jC  (j는 임의의 정수) 

 

(A*B) mod C = ( (T+iC) * (F+jC) ) mod C

                  = ( TF + TjC + iCF + iCjC² ) mod C   

                  = ( TF + C(Tj + Fi) + iCjC² ) mod C  

                  = ( TF ) mod C

                  = ( (A mod C) * (B mod C) ) mod C 

 

 앞서 말한것처럼 Tj와 Fi 값에 상관없이 C의 배수인것들은 영향을 끼치지 못하므로 제외한다고 생각하면 된다. 

다른것들은 위와 동일하다. 

 

출처:https://st-lab.tistory.com/19

 


| 풀이

 풀이는 정말 간단하게 출력만 하는것이라 어렵지 않게 풀었다.

이번에는 scanner를 사용하여 풀었다.