[백준] 입출력과 사칙연산 (JAVA)

10000JI·2024년 3월 19일
0

코딩 테스트

목록 보기
9/39

백준 온라인 저지에 들어가면 단계별로 풀어보기 라는 메뉴바가 있다.

코딩테스트에 익숙하지 않다면 해당 문제들부터 시작해보는 것을 권장한다.

풀어보니 내가 부족한 면을 알 수 있었고, 기초부터 다질 수 있어 매일 꾸준히 하려고 노력중이다.

대부분이 쉬운문제들로 구성되어 있다 보니 하면서 헷갈리거나 어려웠던 내용만 정리해보자

1. 1008번 : A/B

문제

두 정수 AB를 입력받은 다음, A/B를 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 AB가 주어진다. (0 < A, B < 10)

출력

첫째 줄에 A/B를 출력한다. 실제 정답과 출력값의 절대오차 또는 상대오차가 10^-9 이하이면 정답이다.

예제 입력 1

1 3

예제 출력 1

0.33333333333333333333333333333333

10^-9 이하의 오차를 허용한다는 말은 꼭 소수 9번째 자리까지만 출력하라는 뜻이 아니다.

나의 생각

문제를 딱 보자마자 무지성으로 Scanner를 사용해 정수형을 받고, 받은 정수형을 계산식을 완성한 뒤 Castng(강제 타입 변환)을 사용하자고 생각함

나의 생각을 토대로 작성한 코드

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner kb = new Scanner(System.in);
        int a = kb.nextInt();
        int b = kb.nextInt();
        double c = (double) a / b;
        System.out.print(c);
    }
}

BufferedReader와 StringTokenier 사용한 코드

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

public class Main {
    
    public static void main(String[] args) throws Exception {
    	BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        int num1 = Integer.parseInt(st.nextToken());
        int num2 = Integer.parseInt(st.nextToken());
        System.out.print((double)num1 / (double)num2);
    }
}

훨씬 더 적은 메모리와 적은 시간이 걸리는 것을 확인할 수 있다.

Scanner 보다 BufferedReader을 사용하면 속도가 빨라진다.

문자열에 최적화된 BufferedReader에 비해 Scanner는 다양한 기능을 지원해서 무겁기 때문이다.

2. 11382번 : 꼬마 정민

문제

꼬마 정민이는 이제 A + B 정도는 쉽게 계산할 수 있다. 이제 A + B + C를 계산할 차례이다!

입력

첫 번째 줄에 A, B, C (1A, B, C1012)이 공백을 사이에 두고 주어진다.

출력

A+B+C의 값을 출력한다.

예제 입력 1

77 77 7777

예제 출력 1

7931

나의 생각

위에서 배운 것을 토대로 BufferedReader 를 사용하여 문자열을 받고, StringTokenizer 로 공백을 기준으로 토큰으로 분할하여 정수로 변환시켰다.

나의 생각을 토대로 작성한 코드

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

현실은 런타임 에러로 NumberFormat 즉, NumberFormatException 이 발생한다.

NumberFormatException 해결

보면 A,B,C 각각은 10^12보다 작거나 같다. 이 말 즉슨 int형보다 큰 값 을 입력할 수 있다는 것이다. 따라서 long 형을 선언해야 한다.

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));
        StringTokenizer st = new StringTokenizer(br.readLine());
        Long A = Long.parseLong(st.nextToken());
        Long B = Long.parseLong(st.nextToken());
        Long C = Long.parseLong(st.nextToken());

        System.out.println(A + B + C);
    }
}

BufferedReaderStringTokenizer 개념은 다음 풀이에서 정리해보자

profile
Velog에 기록 중

0개의 댓글