Coded by Juny

Scanner - nextInt() & nextLine() 본문

Coding & Algorithm/기타

Scanner - nextInt() & nextLine()

Juny_Choi 2024. 10. 18. 17:02

코딩 테스트를 준비하다가 무의식적으로 헷갈렸던 부분에 대해 확실하게 짚고자 작성해보려고 한다. 

 

nextLine()이 개행문자를 입력받으면 빈문자열로 입력되는 것을 알고는 있지만 계속 헷갈려서 gpt와 대화식으로 자세히 정리해보았다.

 

 

Me : 5 1 2 2 1 2 3 1 2 4 1 2 5 10 7 1293 아아 입력값이 이렇게 들어왔을 때 맨 처음 5를 읽고나면 그다음 1을 읽을 땐 바로 nextInt()를 적어도 되지만 바로 nextLine()을 읽을 땐 개행문자를 읽어버려서 nextLine()을 두번 써줘야되는거지?

 

GPT : 정확히 이해하셨습니다! 입력값이 다음과 같이 주어질 때:

5
1 2 2
1 2 3
1 2 4
1 2 5
10 7 1293

 

 

입력 처리 과정

  1. 첫 번째 입력 (5) 읽기
    • int T = sc.nextInt(); 호출 후 T 변수에 5가 저장됩니다.
    • 이 때, 입력 버퍼에는 여전히 개행 문자(\n)가 남아 있습니다.
  2. 다음 입력 (1 2 2) 읽기
    • sc.nextLine(); 호출 시 남아 있는 개행 문자를 읽고 빈 문자열이 됩니다.
    • 따라서 nextInt()를 호출할 경우 다음 정수를 읽는데 아무 문제가 없지만, nextLine()을 호출하면 빈 줄을 읽게 됩니다.
  3. 다음 nextInt() 사용
    • int x = sc.nextInt();를 호출하면, 1을 읽어올 수 있습니다.
  4. 다음 nextLine() 사용
    • 다음으로 nextLine()을 호출하면, 현재 버퍼에 남아 있는 2 2를 읽게 됩니다.

결론

  • 만약 nextLine()을 바로 호출하면 개행 문자를 읽게 되어 이후 입력에서 문제가 생길 수 있습니다.
  • 따라서 일반적인 패턴은 다음과 같습니다:
int T = sc.nextInt(); // 첫 번째 입력
sc.nextLine(); // 개행 문자 처리

for (int test_case = 1; test_case <= T; test_case++) {
    String line = sc.nextLine(); // 다음 줄 읽기
    // 필요한 처리...
}

이와 같은 방식으로 코드를 작성하면 입력값을 올바르게 읽을 수 있습니다!

 

 

 

즉, 다음 nextLine()을 쓸 때만 개행문자가 있는지 없는지 잘 확인해주면 된다는 의미이다.. 알면서도 몇번을 틀렸는지! 

'Coding & Algorithm > 기타' 카테고리의 다른 글

1859. 백만 장자 프로젝트  (0) 2024.10.21