상냥한 세상 :: [백준]10430번: 나머지

본문으로 바로가기

[백준]10430번: 나머지

category Computer Science/BAEKJOON JAVA Practice 2021. 12. 25. 16:45

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

 

10430번: 나머지

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

www.acmicpc.net

  • 문제

이 문제는 여타 나왔던 문제들과 다르게 초반에 코드가 동작할 수 있게 하는 식을 만들고 시작해야한다. 

주어진 문제는  (2 ≤ A, B, C ≤ 10000) 일때, 
(A+B)%C=((A%C)+(B%C))%C
(AxB)%C=((A%C)x(B%C))%C

인지를 묻고 있다. 

가령 예를들어, A,B,C가 각각 5,8,4 일경우 (정수형)
(A+B)%C=(5+8)%4=1
((A%C)+(B%C))%C=((5%4)+(8%4))%4=1%4=1
즉, (A+B)%C=((A%C)+(B%C))%C 가 성립한다. 

 

출력은 

1

1

0

0

으로 출력해야하므로, 줄바꿈도 어쩌면 필요할지도 모른다.

 

코드를 짜기전에 필요한 연산자를 먼저 적어보자

(A+B)%C=((A%C)+(B%C))%C
(AxB)%C=((A%C)x(B%C))%C 
은 아래와 같이 바뀐다. 

(A+B) %C 
(A%C + B%C)%C 
(A*B)%C 
(A%C * B%C)%C

  • 코드1
import java.util.Scanner;
public class Main {
 
	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		
		int A = in.nextInt();
		int B = in.nextInt();
		int C = in.nextInt();
 
		in.close();
 
		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 );
		
	}
 
}

앞선 포스트에서 늘써왔던 Scanner방식이다. 입력스트림에 필요한 System.in 그리고 닫아주는 in.close();를 써준뒤 시스템출력을 해주면 된다. 


  • 결과


  • 코드2
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.StringTokenizer;

public class Main{
    public static void main(String[] args)throws IOException{
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st=new StringTokenizer(br.readLine()," ");
        
        int A = Integer.parseInt(st.nextToken());
        int B = Integer.parseInt(st.nextToken());
        int C = Integer.parseInt(st.nextToken());
        
        StringBuilder sb=new StringBuilder();
        
        sb.append( (A+B)%C );
        sb.append('\n');
        
        sb.append( (A%C + B%C)%C );
        sb.append('\n');
        
        sb.append( (A*B)%C );
        sb.append('\n');
        
        sb.append( (A%C * B%C)%C );
        
        System.out.println(sb); 
    }
}

역시 익숙한 앞서 사용한 BufferedReader+StringTokenizer의 사용방법이다.


  • 결과


  • 코드3
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.IOException;
import java.util.StringTokenizer;

public class Main{
	public static void main(String[] args) throws IOException{
    	BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st=new StringTokenizer(br.readLine());
        int A=Integer.parseInt(st.nextInt());
        int B=Integer.parseInt(st.nextInt());
        int C=Integer.parseInt(st.nextInt());
        
        BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(System.out));
        bw.write( ((A+B)%C) + "\n" );
        bw.write( ((A%C + B%C)%C) + "\n" );
        bw.write( ((A*B)%C) + "\n" );
        bw.write( ((A%C * B%C)%C) + "\n" );
        
        bw.flush();
        bw.close();
        
        }
}

기본적인 문법사용(이전 포스트에서 다뤘던 Buffer과 StringTokenizer의 사용법참고)의 변함은 없다. 다만, 같이 써봤을 뿐이다. 


  • 결과


  • 코드1,2,3 속도비교

Scanner 사용
BufferedReader+StringTokenizer 사용
BufferedReader/Writer+StringTokenizer 사용

'Computer Science > BAEKJOON JAVA Practice' 카테고리의 다른 글

[백준]1330번: 두 수 비교하기  (0) 2021.12.26
[백준]2588번: 곱셈  (0) 2021.12.25
[백준]10869번: 사칙연산(용어정리)  (0) 2021.12.24
[백준]10098번: AxB  (0) 2021.12.22
[백준]1001번: A-B  (0) 2021.12.22