[백준] 2739번 구구단 (JAVA)

10000JI·2024년 3월 19일
0

코딩 테스트

목록 보기
10/39
post-thumbnail

문제

N을 입력받은 뒤, 구구단 N단을 출력하는 프로그램을 작성하시오. 출력 형식에 맞춰서 출력하면 된다.

입력

첫째 줄에 N이 주어진다. N1보다 크거나 같고, 9보다 작거나 같다.

출력

출력형식과 같게 N*1부터 N*9까지 출력한다.

예제 입력 1

2

예제 출력 1

2 * 1 = 2
2 * 2 = 4
2 * 3 = 6
2 * 4 = 8
2 * 5 = 10
2 * 6 = 12
2 * 7 = 14
2 * 8 = 16
2 * 9 = 18

첫 제출

이전에 배운 BufferedReaderStringTokenizer 를 이용

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());
        for (int i = 1; i <= 9; i++) {
            System.out.println(a + " * " + i + " = " + a * i);
        }
    }
}ㄷ둡

두 번째 제출

import java.io.*;
import java.util.StringTokenizer;

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));
        StringTokenizer st = new StringTokenizer(br.readLine());
        int a = Integer.parseInt(st.nextToken());
        for (int i = 1; i <= 9; i++) {
            //메서드를 통해 출력할 데이터를 버퍼에 쓴다. 구구단 결과를 문자열로 만들어 출력
            bw.write(a + " * " + i + " = " + (a * i));
            //구구단 결과를 한 줄씩 출력
            bw.newLine();
        }
        //버퍼에 남아있는 데이터를 출력 스트림으로 밀어내어 실제로 출력
        bw.flush();
    }
}

미묘하지만 메모리가 줄어든 것을 확인 16152 KB → 16140 KB

BufferedReader, BufferedWriter, StringTokenizer를 다시 한번 정리해보자

BufferedReader 😑

Scanner 와 유사하다.

Bufferedwriter 😐

System.out.println(); 과 유사

둘은 모두 기존에 쓰던 scanner와 System.out.println()보다 속도 측면에서 훨씬 빠르기 때문에

(입력된 데이터가 바로 전달되지 않고 버퍼를 거쳐 전달되므로 데이터 처리 효율성을 높임)

많은 양의 데이터를 처리할 때 유리하다.

이 둘을 사용하려면 다음의 import가 추가적으로 필요하다.

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

실제 코딩테스트 환경에선 import java.io.* 을 쓰면 되겠지?

BuffredReader 사용법

BufferedReader bf = new BufferedReader(new InputStreamReader(System.in)); //선언
String s = bf.readLine(); //String
int i = Integer.parseInt(bf.readLine()); //Int

주의

  1. readLine()리턴값을 String으로 고정되기에 String이 아닌 다른 타입으로 입력을 받을려면 형변환을 꼭 해주어야한다는 점
  2. 예외처리를 꼭 해주어야한다는 점! 대개 throws IOException을 통하여 작업한다.

import java.io.IOException;

public static void main(String[] args) throws IOException {}

StringTokenizer

StringTokenizer st = new StringTokenizer(s); //StringTokenizer인자값에 입력 문자열 넣음
int a = Integer.parseInt**(st.nextToken());** //첫번째 호출
int b = Integer.parseInt**(st.nextToken());** //두번째 호출

String array[] = s.split(" "); //공백마다 데이터 끊어서 배열에 넣음

Read한 데이터는 Line단위로만 나눠지기에 공백단위로 데이터를 가공하려면 따로 작업을 해주어야 한다.

StringTokenizernextToken()함수를 쓰면 readLine()을 통해 입력받은 값을 공백단위로 구분하여 순서대로 호출 가능하다.

BufferedWriter 사용법

BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));   //할당된 버퍼에 값 넣어주기
String s = "abcdefg";   //출력할 문자열
bw.write(s+"\n");   //버퍼에 있는 값 전부 출력
bw.flush();   //남아있는 데이터를 모두 출력시킴
bw.close();   //스트림을 닫음

BufferedWriter 의 경우 버퍼를 잡아 놓았기 때문에 반드시 flush() / close() 를 반드시 호출해 주어 뒤처리를 해주어야 한다.

bw.write에는 System.out.println();과 같이 자동개행기능이 없기 때문에 2가지 방법으로 처리 가능하다.

  1. 개행을 해주어야할 경우에는 \n를 통해 따로 처리
  2. bw.newLine() ****를 사용해 한 줄씩 출력

출처

[JAVA] BufferedReader 와 Bufferedwriter 사용법
[JAVA] String, StringBuilder, StringBuffer, BufferedWriter 차이

profile
Velog에 기록 중

0개의 댓글