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까지 받았음에도 불구하고
나는 배열에 넣는 것을 고집하고 있었다...
바부!
시간이 미약하게나마 줄어들었다.....