일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- 백준11021
- 문자열메서드
- 알고리즘
- Java
- 비교 연산자
- 인스턴스
- A+B - 7
- 15552
- 그라운드시소
- 백준10953
- 이너클래스
- BufferedWriter
- 백준15552
- 11021
- 연산자 우선순위
- BufferedReader
- 백준
- nextline()
- SpringBoot
- 논리 연산자
- 코딩은체육과목입니다
- 코딩테스트
- 인스턴스화
- 10953
- 서버개발
- A+B - 6
- 산술 연산자
- 조건 연산자
- 포맷팅
- nextInt()
Archives
- Today
- Total
Coded by Juny
Scanner - nextInt() & nextLine() 본문
코딩 테스트를 준비하다가 무의식적으로 헷갈렸던 부분에 대해 확실하게 짚고자 작성해보려고 한다.
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
입력 처리 과정
- 첫 번째 입력 (5) 읽기
- int T = sc.nextInt(); 호출 후 T 변수에 5가 저장됩니다.
- 이 때, 입력 버퍼에는 여전히 개행 문자(\n)가 남아 있습니다.
- 다음 입력 (1 2 2) 읽기
- sc.nextLine(); 호출 시 남아 있는 개행 문자를 읽고 빈 문자열이 됩니다.
- 따라서 nextInt()를 호출할 경우 다음 정수를 읽는데 아무 문제가 없지만, nextLine()을 호출하면 빈 줄을 읽게 됩니다.
- 다음 nextInt() 사용
- int x = sc.nextInt();를 호출하면, 1을 읽어올 수 있습니다.
- 다음 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 |
---|