BufferedReader/BufferdWriter && 백준 5622

혜준·2024년 8월 22일

지금까지는 scanner로 공부하다가 이제 BufferedReader/BufferedWriter가 장기적으로 봤을때 더 효율적이라는 글을 보고 공부하게 되었다

BufferedReader/BufferdWriter 란?

  • BufferedReader와 BufferdWriter는 버퍼를 사용하여 읽기와 쓰기를 하는 함수이다.
  • BufferedReader은 입력 받은 데이터가 String으로 고정되기 때문에 입력받은 데이터를 원하는 타입으로 가공하는 작업이 필요하다.
  • 중간에 버퍼를 두어 한번에 묶어 보내는 것이 더 효율적이고 빠른 방법이다.
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); // 선언
String s = br.readLine();
int i = Integer.parseInt(br.readLine());
  • String으로 리턴 값이 고정되어 있기 때문에, 다른 타입으로 입력을 받고자 한다면 반드시 형변환이 필요하다. 그리고, 예외처리를 반드시 필요로 한다. readLine()시 마다 try/catch문으로 감싸주어도 되고, throws IOException 을 통한 예외처리를 해도 된다.(대부분의 경우에 후자를 사용한다.)

이제 알았으니 이 개념을 통해 백준 문제를 풀어보자

숫자 1을 걸려면 2초가 걸리기 때문에 2부터 시작하여 3부터 10까지 카운트하면 된다.
이 글을 못봐서 초반에 헤맸단 사실..

이제 글을 처음부터 정독을 하자 ..

코드로 보면 입력말고는 다른부분은 똑같다

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

//숫자 1을 걸려면 총 2초가 필요하다.
// 1보다 큰 수를 거는데 걸리는 시간은 이보다 더 걸리며, 한 칸 옆에 있는 숫자를 걸기 위해선 1초씩 더 걸린다.

public class clock {
    public static void main(String[] args) throws IOException {
        BufferedReader bf=new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(System.out));

        String s=bf.readLine();
        int count=0;

        for(int i=0; i<s.length(); i++){
            switch (s.charAt(i)){
                case 'A':
                case 'B':
                case 'C':
                    count +=3;
                    break;
                case 'D':
                case 'E':
                case 'F':
                    count +=4;
                    break;
                case 'G':
                case 'H':
                case 'I':
                    count +=5;
                    break;
                case 'J':
                case 'K':
                case 'L':
                    count +=6;
                    break;
                case 'M':
                case 'N':
                case 'O':
                    count +=7;
                    break;
                case 'P':
                case 'Q':
                case 'R':
                case 'S':
                    count +=8;
                    break;
                case 'T':
                case 'U':
                case 'V':
                    count +=9;
                    break;
                case 'W':
                case 'X':
                case 'Y':
                case 'Z':
                    count +=10;
                    break;
            }

        }
        System.out.println(count);
    }
}

참고)
https://rlakuku-program.tistory.com/33

profile
성장을 추구하는 개발자 입니다 :)

0개의 댓글