rlaxodnd5   4년 전

Scanner를 사용하면 런타임 오류가 발생합니다.

그러나 BufferedReader를 사용하면 통과합니다.

이러한 차이가 발생하는 원인이 궁금합니다..

Scanner sc = new Scanner(System.in); -> BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

sc.nextInt(); -> Integer.parseInt(br.readLine());

bupjae   4년 전

지금 여기에 붙이신 코드가 BOJ에 제출한 코드와 완전히 동일합니까?

만약 그렇다면, 첫 번째 줄의 package 문 때문에 RTE가 발생했을 겁니다.

이것 이외에 다른 부분에서 RTE가 발생할 만한 곳은 없는 것 같습니다.

rlaxodnd5   4년 전

첫번째 줄 package는 코드 관리로 만든거라 BOJ 제출시에는 포함되지 않았습니다만 제가 실수로 질문올릴때 코드에 포함시켜버렸네요..

질문드린 코드중 package 제외하고 제출하더라도 RTE가 발생합니다.

그러나 아래 코드는 BufferedReader로만 바꿨는데 Pass한 답안입니다.

import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int N = Integer.parseInt(br.readLine());

        int[] count = new int[10001];

        for (int i = 0; i < N; i++) {
            int a = Integer.parseInt(br.readLine());
            if(a >= 1 && a <= 10000)
                count[a]++;
        }

        for (int i = 1; i <= 10000; i++) {
            for (int j = 0; j < count[i]; j++) {
                bw.write(i + "\n");
            }
        }

        bw.flush();
    }
}

bupjae   4년 전

이 프로그램을 제출했을 당시 BOJ에 시간 초과를 런타임 에러로 잘못 판정하는 버그가 있었을 가능성이 있습니다.

java 의 Scanner 는 입출력 속도가 *매우* 느린 것으로 악명이 높습니다. 원래 받았어야 할 결과는 "시간 초과"일 가능성이 높습니다.

댓글을 작성하려면 로그인해야 합니다.