[백준] 11021번 : A+B -7 -JAVA(자바)

Life is ninanino·2022년 10월 5일
0

[백준] JAVA

목록 보기
8/37
post-thumbnail

https://www.acmicpc.net/problem/11021


package 백준;// @ author ninaaano

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

public class b_11021 {
    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());
        StringTokenizer st = new StringTokenizer(br.readLine()+" ");
        int a = Integer.parseInt(st.nextToken());
        int b = Integer.parseInt(st.nextToken());

        for(int i = 0; i<n; i++){
            bw.write("Case #: "+String.valueOf(i)+String.valueOf(a+b));
            bw.newLine();
        }

        br.close();
        bw.flush();
        bw.close();
    }
}

일단 이건 오답이다

출력값이 이런식으로 나온다...
BufferedWrite는 익숙하지가 않아서 어떤식으로 출력해야될지 잘 모르겠다
왜 첫번째에 1 1에 더한 값만 5번이 출력되고 i를 붙이면 그 숫자가 앞에 붙는 걸까?

++ 정답

package 백준;// @ author ninaaano

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

public class b_11021 {
    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());
        int[] arr = new int[n];

        for(int i = 0; i<n; i++){
            StringTokenizer st = new StringTokenizer(br.readLine()+" ");
            int a = Integer.parseInt(st.nextToken());
            int b = Integer.parseInt(st.nextToken());
            arr[i] = a+b;
            bw.write("Case #"+String.valueOf(i+1)+": "+String.valueOf(arr[i]));
            bw.newLine();
        }

        br.close();
        bw.flush();
        bw.close();
    }
}

StringTokenizer의 위치를 for문 안으로 넣어주고 i값사이에 ": " 이라는 String 문자를 추가해주었다.
이전 코드에서

bw.write("Case #: "+String.valueOf(i)+String.valueOf(a+b));

이런식으로 작성했었는데 String + int + int 로 생각을해서
앞에 있는 i값과 뒤에 a+b값이 합쳐서 출력되고 있었던 것이다.
StringTokenizer는 위치의 영향을 받는 듯 하다.
for문 바깥으로 옮기면 1줄밖에 읽어들이지 못한다.
그래서 for문이 도는 동안 토큰을 받았다.
근데 굳이 arr안에 값을 담아야 하는 걸까? 라는 의문이 들었다.

package 백준;// @ author ninaaano

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

public class b_11021 {
    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());
        //int[] arr = new int[n];

        for(int i = 0; i<n; i++){
            StringTokenizer st = new StringTokenizer(br.readLine()+" ");
            int a = Integer.parseInt(st.nextToken());
            int b = Integer.parseInt(st.nextToken());
            //arr[i] = a+b;
            bw.write("Case #"+String.valueOf(i+1)+": "+String.valueOf(a+b));
            bw.newLine();
        }

        br.close();
        bw.flush();
        bw.close();
    }
}

놀랍게도 배열에 넣을 필요가 없었다.
나는 왜 배열을 고집하고 있던 걸까..ㅎㅎ 그도 그럴것이 arr.length까지가 아니라 n까지 받았음에도 불구하고
나는 배열에 넣는 것을 고집하고 있었다...
바부!

시간이 미약하게나마 줄어들었다.....

profile
백엔드 프로그래밍을 공부하고 있습니다. AWS, 클라우드 환경에 대해 관심이 많습니다.

0개의 댓글