본문 바로가기
Algorithm/BOJ

[BOJ]10430번: 나머지

by HBGB 2019. 9. 16.

https://www.acmicpc.net/problem/10430

 

10430번: 나머지

첫째 줄에 A, B, C가 순서대로 주어진다. (2 ≤ A, B, C ≤ 10000)

www.acmicpc.net

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import java.util.Scanner;
 
public class Main {
    public static void main(String[] args) {
 
        Scanner sc = new Scanner(System.in);
 
        int A = sc.nextInt();
        int B = sc.nextInt();
        int C = sc.nextInt();
        System.out.println((A + B)%C);
        System.out.println((A%C + B%C)%C);
        System.out.println((A * B)%C);
        System.out.println((A%C * B%C)%C);
        
        //이하는 문제 정답과 무관한 코드
        System.out.println((A - B)%C);
        System.out.println((A%C - B%C)%C);
        System.out.println((A%C - B%C + C)%C);
    }
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter

 

 

알고리즘 테스트에서 계산결과가 int나 long과 같은 자료형의 범위를 넘어설 때, 

계산결과를 ~로 나눈 나머지를 정답으로 제출하라 한다고 한다.

 

 

TIP

이때 뺄셈의 나머지 연산

(A - B)%C   와  (A%C - B%C)%C  의 결과는 같을까?

 

더보기

풀이

0 ≤ A%C < C  ,  0 ≤ B%C < C    이므로

-C ≤ (A%C - B%C) < C    이다.

 

각변에 C를 더해주면

0 ≤ (A%C - B%C) + C < 2C    이고,

 

여기서 각변을 C로 나눠주면

0 ≤ (A%C - B%C + C)%C < 2C%C    가 되므로,

항상 양의 나머지값을 얻을 수 있다.

 

 

(A%C - B%C)%C 의 결과는

파이썬에서는 항상 양의 나머지로 출력되지만,

JAVA, C/C++ 에서는 음의 나머지로 출력될 수 있다.

 

 

양의 나머지를 얻고자 할 때에는 

(A%C - B%C + C)%C

를 활용하자

 

 

 

 

댓글