😂 오답 1
어설프게라도 따라 했다는 것에 의의를 두었다
다음과 같은 오류 문구가 출력된다.
아래의 구문에서 오류가 났다는 것인데, NumberForamtException이다 😂 비어있는 문자열을 int형으로 파싱 하려고 해서 생긴 오류이다. 애초에 BufferedWriter를 반복문 안에서 생성하면 안 됐었다!
구글링을 한 결과
Read한 데이터는 Line 단위로만 나눠지기 때문에 공백 단위로 데이터를 가공하기 위해서는 별도의 작업을 해야한다.
StringTokenzier의 nextToken()를 사용해서 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()함수를 이용해서 데이터를 출력해 없앤 후, 스트림을 닫으면 된다.
역대급으로 오랜 시간이 걸렸지만 그래도 많은 걸 배울 수 있던 문제였다 👍
다음에는 더 익숙하게 풀겠지 !
'📓 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 |
댓글