Stay Hungry Stay Foolish

BOJ 코딩테스트/Bronze

BOJ 4470 : 줄번호 (Java/구현/Bronze 4)

dev스카이 2024. 10. 9. 13:37

[문제] 👉  https://www.acmicpc.net/problem/4470


설명

입력받은 문자열에 번호를 차례로 부여하는 문제이다.

 

풀이

단순히 번호를 부여하는 문제이므로 풀이 설명 생략

Scanner 대신 BufferReader 와 BufferedWriter 사용

 

 

BufferedReader/BufferedWriter 사용 방법

 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); // 입력 선언
 String str = br.readLine(); //키보드로 입력 받기
 
 BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); // 출력 선언
 bw.write(str); //출력

 

 

키보드로 입력받을 수 있는 readLine()을 사용하려면 throws IOException 를 붙여야 한다.

 

 

형변환 필요

BufferdReader는 String으로 고정되어 있기 때문에 정수를 입력하려면 형변환이 필요하다. 

int n = Integer.parseInt(br.readLine());

 

 

추가 메서드

bw.newLine(); // 줄바꿈
bw.flush(); // 남아있는 데이터 모두 출력
bw.close(); //버퍼 닫기

 

 

Solution

import java.io.*;

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)); // 출력 선언

        int n = Integer.parseInt(br.readLine()); //String으로 리턴 값이 고정되어 있으므로 형변환(예외 처리 필요)

        String[] names = new String[n];
        for (int i = 0; i < n; i++) {
            String name = br.readLine();
            names[i] = (i + 1) + ". " + name;
        }

        for (String result : names) {
            bw.write(result); //출력
            bw.newLine(); // 줄바꿈
        }

        bw.close();
    }
}

 

 

👩‍💻 회고

아는게 Scanner 뿐이어서 그것만 사용하고 있다가 BufferdReader로 입출력을 빠르게 하고 싶어서 사용해봤다. 코드가 훨씬 더 길어지고 사용해야 할 메서드가 많아졌지만 확실한 건 메모리나 속도가 빨라졌다는 것이다. 그리고 Scanner를 쓸 때 개행문자때문에 불편했는데 버퍼를 사용하니 그런 불편함이 사라졌다.