Algorithm/Baekjoon(Java)

[백준/JAVA] 10430 : 나머지 ( new StringTokenizer(br.readLine()); )

비망노트 2022. 6. 29. 21:51
문제

(A+B)%C는 ((A%C) + (B%C))%C 와 같을까?

(A×B)%C는 ((A%C) × (B%C))%C 와 같을까?

세 수 A, B, C가 주어졌을 때, 위의 네 가지 값을 구하는 프로그램을 작성하시오.

 

입력

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

 

출력

첫째 줄에 (A+B)%C, 둘째 줄에 ((A%C) + (B%C))%C, 셋째 줄에 (A×B)%C, 넷째 줄에 ((A%C) × (B%C))%C를 출력한다.

 

예제 입력 예제 출력
5 8 4 1
1
0
0

 

⭕ 풀이

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
import java.io.IOException;

public class Main{
    public static void main(String[] args)throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        
        String input = br.readLine();
        StringTokenizer st = new StringTokenizer(input," ");
        
        int[] intArr = new int[3];
        for(int i=0;;i++){
            intArr[i] = Integer.parseInt(st.nextToken());
            if(st.hasMoreTokens()==false){
                break;
            }
        }
        int a = intArr[0];
        int b = intArr[1];
        int c = intArr[2];
        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);
        
        bw.close();
        
    }
}

우선 readLine() 으로 5 8 4 라인 전체를 받은 후 StringTokenizer를 활용해 분리해주었다.

      이후 정수형 배열을 생성해 각 인덱스에 분리해준 값을 정수형으로 형변환시켜 넣었다.

      for문 내에 종료조건식을 즉, 인덱스를 어디까지 늘려야할지 몰라 hasMoreTokens()를 사용해 if문을 작성해주었다.

     이후 intArr배열의 값을 정수형 a,b,c로 담아 출력해주었다.

- for문 없이 바로 a,b,c로 nextToken을 파싱해 정수형으로 받을 수 있기도 하다.

 

❗ Scanner와 split이 아닌 Bufferedreader와 StringTokenizer를 활용해 푸는 습관을 들여보려 했는데

   아무래도 파싱과정이나 배열에 담을경우 어떻게 멈춰야할지 등등 아직 많이 어색하다.

 

 

✅ 다른분의 풀이

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
import java.io.IOException;

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());
        
        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);
        
    }
}

❗  StringTokenizer st = new StringTokenizer(br.readLine());

나의경우 String input을 선언해서 input을 분리해서 활용했는데 

구분자가 없을경우 공백이 기준이고,

따로 변수를 활용할 필요없이 이렇게 br.readLine()를 바로 사용해도 되는구나

 

 

 

 

 

https://www.acmicpc.net/problem/status/10430/3/19