글을 쓰는 계기 : 백준 코테 문제를 풀다가, for 문이 끝까지 돌아가지 않아서 문제는 맞췄지만 찜찜한 마음에 파고들었던 코드에 대한 기록
푼 문제 : https://www.acmicpc.net/problem/10950

import java.io.*;
import java.lang.*;
import java.util.Scanner;
/*
로직.
입력 - scanner(숫자값 입력)
? Scanner를 사용한 이유?
- Buffered는 Strign 이라서 형변환이 필수이니, scanner 의 nextInt() 를 사용하기 위해서 scanner를 사용함.
대충 로직
input
for(int i = 1; i <10 ; i++) {
Sout( input + " * " + i " = " + input*i );
}
*/
public class Main {
public static void main(String[] args) throws IOException {
Scanner sc = new Scanner(System.in);
// 테스트 케이스의 개수 T
int T = sc.nextInt();
//System.out.println(T);
// 테스트 케이스(0부터 테스트 케이스 수만큼 반복)
// 왜 T 자리에 무슨 수를 넣어도 네번째까지만 반복하지?
for (int i = 0; i < T ; i++) {
//for문 돌때마다 A, B 생성 및 저장
int A = sc.nextInt();
int B = sc.nextInt();
// 입력 조건 만족하는지 확인
checkInput(A, B);
//System.out.println( "A : " + A + " B : " + B + " i : " + i);
System.out.println(A+B);
}
sc.close();
}
// 입력 조건에 맞지 않은 값이 입력되면 프로그램 종료
public static void checkInput(int A, int B) {
if ((A < 1 || A > 10) || (B < 1 || B > 10)) {
System.exit(0);
}
}
}
실행 결과

로직은 맞다고 생각하는데, 출력이 제대로 나오지 않으니 답답했다.
혹시나 싶어서 백준에 코드를 제출하니, 정답이라고 인정은 되었지만!!! 나는 굉장히 찜찜했다.. 이유를 알고 싶었다..
진짜 찜찜하다..
혼자서 이래저래 찜찜한 이유까지 분석해보고 친구한테 SOS를 보냈다.
"니는.. 이 코드가.. 어데가 이상한거 같은데.. ?"
"Scanner의 nextInt() 이거 때문인 것 같은데.. "
" 아 근데 이게 또 입력을 하나씩 받고 출력을 하나씩 해줘서 문제 같은데.. 입력을 한꺼번에 받고 출력을 하면 될 것 같은데... "
OK.
아래 코드는 친구가 짠 코드인데,
배열을 사용하고,
for문을 사용해서 입력을 한번에 배열에 저장,
for문을 사용해서 출력을 한번에 출력 하는 코드이다.
import java.io.*;
import java.lang.*;
import java.util.Scanner;
public class Main {
public static void main(String[] args) throws IOException {
Scanner sc = new Scanner(System.in);
// 테스트 케이스의 개수 T
int T = sc.nextInt();
//길이 T인 배열
int[] A = new int[T];
int[] B = new int[T];
// 입력, for문 돌때마다 A, B 생성 및 저장
for (int i = 0; i < T ; i++) {
A[i] = sc.nextInt();
B[i] = sc.nextInt();
}
//출력
for(int i=0; i<T; i++){
System.out.println(A[i]+B[i]);
}
sc.close();
}
}
출력이 제대로 나왔다. 엔터를 치지 않아도 끝까지 출력이됐다.
"입력을 한번에 받고 출력을 한번에 한다"는 접근 방법이 신기했다. 입/출력에 대해서 크게 생각을 안하고 로직을 짰었는데, 입/출력에 대한 관점이 생겼다.
배열을 사용.
그래도 아직까지 찜찜하다. 내 코드는 도대체 왜 그랬던거지?
"동생님, 오늘 코테 문제를 풀다가 이런 일이 있었는데 제 코드 좀 보시렵니까?"
"어허, 어디 보자"
참고 : https://gongstudyit.tistory.com/18
" Scanner 의 nextInt( )는 가장 마지막 개행문자(Enter, newline)을 제거하지 않는다. 개행문자(Enter)전까지만 숫자로 입력 받음 "
....
이거구나.
내 코드에서 입력값들이 줄마다 Enter가 되어있어서 입력이 잘들어갔고 그래서 출력이 나왔던 것인데,
입력의 마지막 줄의 B값은 (공백 앞에 있는 A값은 입력이 되고 출력까지 확인함) 입력이 안되던데.. 엔터가 뒤에 없어서 그랬던 거구나...

개행.. 진짜 평소에 쓰지 않는 말인데 코드를 보면서 자주쓰는 단어.. 개행 잊지않겠어~
이 코드가 엄청 어려운 해결방식을 요구하는 문제는 아니었지만, 찜찜한 마음때문에 이러한 과정을 밟아나갔다.
" 요즘 코테 문제 푸는게 재밌다. "