[BOJ] 15552번 | 빠른 A+B

     

     

    😂 오답 1

    어설프게라도 따라 했다는 것에 의의를 두었다

    다음과 같은 오류 문구가 출력된다.

     

    아래의 구문에서 오류가 났다는 것인데, NumberForamtException이다 😂 비어있는 문자열을 int형으로 파싱 하려고 해서 생긴 오류이다. 애초에 BufferedWriter를 반복문 안에서 생성하면 안 됐었다! 

     

     

    구글링을 한 결과

     

    Read한 데이터는 Line 단위로만 나눠지기 때문에 공백 단위로 데이터를 가공하기 위해서는 별도의 작업을 해야한다.

    StringTokenziernextToken()를 사용해서 readLine()을 통해 입력받은 값을 공백 단위로 구분하여 순서대로 호출할 수 있다. String.split() 함수를 사용하는 방법도 있는데, 오늘은 StringTokenzier를 이용해서 풀이해보았다.

     

    😂 오답 2

    이번에는 새로운 오류 NoSuchElementException = 그런 요소 없는데?라는 오류이다.

    하나의 값에 대해서 next가 두 번 나오면 발생하는 오류라고 한다.

    사용자가 입력한 값은 4라서 총 4번 1+1,2+2,3+3,4+4의 값이 계속 출력되어야 하는데.. 뭐가 문제일까?

     

     

    바로 엔터! 때문이었다.

    처음 값 입력 후 엔터, 그다음 값 입력 후 또 엔터를 누르니까 위와 같은 오류가 떴던 것이다.

    한 줄에 b와 c의 값이 모두 들어가야 입력 형식에 맞는 것이다!

    왜? StringTokenizer로 한 줄의 값씩 받아오기로 했었으니까 😂 

    이때 b와 c의 구분은 공백으로 한다.

     

     

    😂 오답 3

     

    ㅎ... 이제는 문자가 이상한 모양으로 깨져서 나온다.

     

    bw.write(sum+"\n");

     

    범인은 바로 개행 때문이었다.

    메소드 내에서 데이터들을 정수형 변환시켰기 때문에 더해진 정수가 문자형으로 처리되어 아스키코드가 출력되는 현상으로 추측된다. 따라서 개행을 넣어주어 해당의 값들을 문자열로 변환과 동시에 개행을 수행할 수 있는 \n개행 문자를 붙여야 제대로 된 합이 문자열 형태로 출력되는 것이다 😉

     

     

    🤗 성공!

    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));
    		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
    		StringTokenizer st;
    		
    		int a = Integer.parseInt(br.readLine());
    		
    		for(int i=1;i<=a;i++) {
    			
    			st = new StringTokenizer(br.readLine());
    			int b = Integer.parseInt(st.nextToken());
    			int c = Integer.parseInt(st.nextToken());
    			int sum = b+c;
    			bw.write(sum+"\n");
    				
    		}
    		bw.flush();
    		bw.close();
    		br.close();
    		
    	}
    }

     

     

    😏 배운 점

    ✔ readLine()의 리턴 값은 String이기 때문에 String이 아닌 타입으로 입력받기 위해서는 형 변환을 해주자!

    예외처리를 꼭 해줘야 한다. 나는 throws IOException을 통하여 작업했다.

    ✔ Systemout.print() = BufferedWriter | Scanner = BufferedRead -> 데이터를 라인 단위로 읽을 수 있고 반환형은 String이다

    ✔ BufferedWriter는 println처럼 함수가 문자열 출력과 개행을 동시에 하지 않기 때문에 write에 "\n"를 넣어야 만한다.

    ✔ 버퍼를 이용한 뒤에는 버퍼를 클린 하게 해주자. flush()함수를 이용해서 데이터를 출력해 없앤 후, 스트림을 닫으면 된다.

     

     

    역대급으로 오랜 시간이 걸렸지만 그래도 많은 걸 배울 수 있던 문제였다 👍

    다음에는 더 익숙하게 풀겠지 ! 

     

     

    런타임 에러 도움말 (NoSuchElement)

    NoSuchElement java.util.NoSuchElementException는 존재하지 않는 것을 가져오려고 할 때 발생합니다. Scanner Scanner에서 이 에러가 발생하는 경우는 더 이상 입력받을 수 있는 값이 없을 때 입니다. import java.uti

    www.acmicpc.net

     

    [JAVA] BufferedReader 와 Bufferedwriter 사용법

    BufferedReader :Scanner와 유사. Bufferedwriter :System.out.println();과 유사 둘은 모두 기존에 ...

    blog.naver.com

     

    벌써 20문제 풀었다  

    728x90

    '📓 Study > Coding Test' 카테고리의 다른 글

    [BOJ] 2438번 별찍기  (0) 2021.09.12
    [BOJ] 5543번 | 상근날드  (0) 2021.09.02
    [BOJ] 8393 | 합  (0) 2021.07.24
    [BOJ] 10950번 | A+B -3  (0) 2021.07.23
    [BOJ] 2739 | 구구단  (0) 2021.07.20

    댓글