본문 바로가기
Algorithm/Baekjoon

[백준] 10869번 : 사칙연산 - Java

by unknownomad 2022. 1. 4.

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

 

10869번: 사칙연산

두 자연수 A와 B가 주어진다. 이때, A+B, A-B, A*B, A/B(몫), A%B(나머지)를 출력하는 프로그램을 작성하시오. 

www.acmicpc.net


 

주의점

  • 입력이 공백 단위로 주어짐
  • 나눗셈(A / B)의 결과는 몫만 반환

유사 문제 유형

https://unknownomad.tistory.com/34

 

[백준] 1000 - 입출력과 사칙연산 : A+B

https://www.acmicpc.net/problem/1000 1000번: A+B 두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오. www.acmicpc.net 문제 주의점: 입력이 공백 단위로 주어진다. 답안 1. Scanner in.n..

unknownomad.tistory.com


입력 방식

1. Scanner

  • 가장 기본적인 입력 방식
  • in.next(): 문자열 입력 시 공백 전까지만 받음(에러나는 경우 多)
  • in.nextLine(): 문자열 입력 시 Enter 입력 전까지만 받음(사용 권장)

 

2. BufferedReader

  • Scanner 입력 방식보다 훨씬 빠른 성능

2.1. 문자열 받는 대표적인 방법

  • read():  한 문자만 읽어오기
  • readLine(): 한 행 읽어오기(사용 권장)
    ➡ readLine()은 한 행을 전부 읽기에 공백 단위로 입력해준 문자열을 다시 공백 단위로 분리해줘야 함

2.2. 문자열 분리 방법

2.2.1. StringTokenizer 클래스

  • split()보다 성능 좋음(단순 규칙으로 문자열 분리하거나 데이터가 더 많아질 때 추천)

2.2.2. split()

  • StringTokenizer 클래스와 split() 모두 문자열을 반환하기에 자료형 타입 확인 후 형변환 유의하기
  • double형으로 풀면 나머지가 정수로 나와도 소수점까지 같이 출력되어 오답으로 처리됨

출력 방식

1. System.out.println()

2. StringBuilder

  • 하나의 문자열로 연결한 후 한번에 출력

3. BufferedWriter

  • 버퍼에 문자열을 담은 후 한번에 출력

풀이

1. Scanner

1.1. Scanner + System.out.println

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();
		
        in.close();
		
        System.out.println(A + B);
        System.out.println(A - B);
        System.out.println(A * B);
        System.out.println(A / B);
        System.out.println(A % B);
    }
}

 

데이터가 많아질 때 시간 단축하기 위한 다른 출력 방법

1.2. Scanner + StringBuilder

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();
		
        in.close();
		
        StringBuilder sb = new StringBuilder();
        sb.append(A + B);
        sb.append("\n");
		
        sb.append(A - B);
        sb.append("\n");
		
        sb.append(A * B);
        sb.append("\n");
		
        sb.append(A / B);
        sb.append("\n");
		
        sb.append(A % B);
		
        System.out.println(sb);
    }
}

 

1.3. Scanner + BufferedWriter

import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) throws IOException {
		
        Scanner in = new Scanner(System.in);
		
        int A = in.nextInt();
        int B = in.nextInt();
		
        in.close();
		
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		
        bw.write((A + B) + "\n");
        bw.write((A - B) + "\n");
        bw.write((A * B) + "\n");
        bw.write((A / B) + "\n");
        bw.write((A % B) + "\n"); //마지막에서도 개행문자 필요
		
        bw.flush();
        bw.close();
    }
}

 

➡ 시간을 더 단축시키려면 입력 방식을 Scanner가 아닌 BufferedReader로 변경해야 함

 

2. BufferedReader

2.1. StringTokenizer 클래스

2.1.1. StringTokenizer 클래스 + System.out.println()

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

public class Main {
    public static void main(String[] args) throws IOException {
		
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
        //long ver.
        String str = br.readLine();
        StringTokenizer st = new StringTokenizer(str, " ");
        //short ver.
        StringTokenizer st1 = new StringTokenizer(br.readLine(), " ");
		
        int A = Integer.parseInt(st.nextToken());
        int B = Integer.parseInt(st.nextToken());
		
        System.out.println(A + B);
        System.out.println(A - B);
        System.out.println(A * B);
        System.out.println(A / B);
        System.out.println(A % B);
    }
}

 

2.1.2. StringTokenizer 클래스 + StringBuilder

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

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

 

2.1.3. StringTokenizer 클래스 + BufferedWriter

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

public class Main {
    public static void main(String[] args) throws IOException {
		
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
        //long ver.
        String str = br.readLine();
        StringTokenizer st = new StringTokenizer(str, " ");
        //short ver.
        StringTokenizer st1 = new StringTokenizer(br.readLine(), " ");
		
        int A = Integer.parseInt(st.nextToken());
        int B = Integer.parseInt(st.nextToken());
		
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        bw.write((A + B) + "\n");
        bw.write((A - B) + "\n");
        bw.write((A * B) + "\n");
        bw.write((A / B) + "\n");
        bw.write((A % B) + "\n"); //마지막에서도 개행문자 필요
		
        bw.flush();
        bw.close();
    }
}

2.2. split()

2.2.1. split() + System.out.println()

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

public class Main {
    public static void main(String[] args) throws IOException {
		
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
        String[] str = br.readLine().split(" ");
        int A = Integer.parseInt(str[0]);
        int B = Integer.parseInt(str[1]);
		
        System.out.println(A + B);
        System.out.println(A - B);
        System.out.println(A * B);
        System.out.println(A / B);
        System.out.println(A % B);
    }
}

 

2.2.2. split() + StringBuilder

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

public class Main {
    public static void main(String[] args) throws IOException {
		
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
        String[] str = br.readLine().split(" ");
        int A = Integer.parseInt(str[0]);
        int B = Integer.parseInt(str[1]);
		
        StringBuilder sb = new StringBuilder();
        sb.append(A + B);
        sb.append("\n");
		
        sb.append(A - B);
        sb.append("\n");
		
        sb.append(A * B);
        sb.append("\n");
		
        sb.append(A / B);
        sb.append("\n");
		
        sb.append(A % B);
		
        System.out.println(sb);
    }
}

 

2.2.3. split() + BufferedWriter

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

public class Main {
    public static void main(String[] args) throws IOException {
		
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
        String[] str = br.readLine().split(" ");
        int A = Integer.parseInt(str[0]);
        int B = Integer.parseInt(str[1]);
		
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		
        bw.write((A + B) + "\n");
        bw.write((A - B) + "\n");
        bw.write((A * B) + "\n");
        bw.write((A / B) + "\n");
        bw.write((A % B) + "\n"); //마지막에서도 개행문자 필요
		
        bw.flush();
        bw.close();
    }
}

성능

  1. BufferedReader + StringTokenizer
  2. BufferedReader + split()
  3. Scanner

데이터가 많을 수록 추천하는 방식

  • 입력: BufferedReader
  • 출력: StringBuilder / BufferedWriter
    (단, 출력 데이터가 매우 적을 때는 오히려 손해일 수 있으니 유의할 것)

 


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

'Algorithm > Baekjoon' 카테고리의 다른 글

[백준] 10926번 : ??! - Java  (0) 2022.01.11
[백준] 10430번 : 나머지 - Java  (0) 2022.01.05
[백준] 1008번 : A / B - Java  (0) 2022.01.03
[백준] 10998번 : A x B - Java  (0) 2021.12.23
[백준] 1001번 : A - B - Java  (0) 2021.12.22

댓글