<단계>
브론즈 5
<문제>
<코드>
(1) 간단한 방법 사용
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
long sum = 0;
Long a = scanner.nextLong();
Long b = scanner.nextLong();
Long c = scanner.nextLong();
sum = a + b + c;
System.out.println(sum);
}
}
(2) while 문 사용
// while 문 사용
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
long sum = 0;
String line = scanner.nextLine();
Scanner lineScanner = new Scanner(line);
while (lineScanner.hasNext()) {
sum += lineScanner.nextLong();
}
System.out.println(sum);
}
}
<트러블 슈팅>
(1) scanner의 입력 종료를 파악하지 못하는 코드를 작성했던 문제
// 잘못된 코드
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int sum = 0;
while (scanner.hasNextInt()) {
sum += scanner.nextInt();
}
System.out.println(sum);
}
}
while 문을 사용해 scanner에 입력이 있을 때만 그 값을 sum에 누적해 주면 되겠다고 생각을 해 위와 같이 코드를 작성했다. 하지만 코드를 실행해 '1 2 3'과 같이 입력을 하고 엔터를 쳐도 콘솔창에서 계속 사용자의 입력을 기다리는 문제가 발생했다.
scanner의 nextInt()는 스페이스와 엔터 둘 다를 구분자로 인식하기에, 엔터를 입력해도 이를 종료로 받아들이지 않는 것 같다. while 문을 꼭 써서 해결하고 싶다면, '1 2 3'이라는 한 줄을 먼저 입력받고, 그 줄을 while 문을 통해 읽어나가면서 sum 값을 누적해 가는 방법을 사용해야 한다. 이렇게 작성한 코드가 (2)번 코드다.
다만 이 코드는 scanner 두 개를 사용해야하는 번거로움이 있다. 그래도 덕분에 scanner의 사용 방법을 좀 더 자세히 알아볼 수 있었다.
(2) 입력값의 크기를 고려하지 않은 코드를 작성했던 문제
A, B, C의 값의 최대 크기는 10^12인데, 이는 int 타입의 최댓값을 초과하는 범위라 int 대신 long을 사용해주어야 한다. 문제를 제대로 읽지 않고 코드가 잘 돌아가길래 제출했는데 틀렸다는 문구가 나와 다시 확인해 보니 이를 고려해주지 못했다ㅠㅠ int로 작성된 부분을 다 long으로 고쳐주었더니 정답 처리되었다.
'Baekjoon > 브론즈 5' 카테고리의 다른 글
[백준][JAVA/자바] 11718번: 그대로 출력하기 (0) | 2022.12.14 |
---|---|
[백준][JAVA/자바] 11022번: A+B - 8 (0) | 2022.12.14 |
[백준][JAVA/자바] 11021번: A+B - 7 (0) | 2022.12.12 |
[백준][JAVA/자바] 10952번: A+B - 5 (0) | 2022.12.09 |
[백준][JAVA/자바] 10951번: A+B - 4 (0) | 2022.12.02 |
댓글