본문 바로가기

개발로그/TIL

코드업 1084번 시간 초과 문제 (자바)

코드업 1084번은 세 개의 반복문으로 풀이할 수 있음

IDE에서는 잘 동작하는 코드를 제출하면 시간초과 결과를 받게 됨

 

이유는 자바의 System.out.println() 이 굉장히 느린 출력함수이기 때문

참고 : www.acmicpc.net/blog/view/57

 

그래서 BufferWriter를 사용하여 문제를 풀이함

 

BufferWriter는

bw.write("로 출력하고");

bw.flush(); 로 버퍼 초기화를 하며

bw.close(); 로 버퍼를 종료함

 

이를 사용하여 제출하였는데, 시간은 줄어들었지만 그래도 시간초과가 발생함.

 

버퍼를 초기화 하는 bw.flush() 를 매 for 문마다 실행해서 그런가 싶어

bw.flush()를 for 문 밖으로 빼서 마지막 한 번만 실행하게 했더니 통과 하였음.

public class Main {

    public static void main(String[] args) throws IOException {
        Scanner sc = new Scanner(System.in);
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        int n1 = sc.nextInt();
        int n2 = sc.nextInt();
        int n3 = sc.nextInt();
        int cnt = 0;

        for (int i = 0; i < n1; i++) {
            for (int j = 0; j < n2; j++) {
                for (int k = 0; k < n3; k++) {
                    bw.write(i +" "+ j +" "+ k + "\n");
//                    bw.flush();
                    cnt ++;
                }
            }
        }
        bw.write(cnt + "\n");
        bw.flush();
        bw.close();

    }
}

'개발로그 > TIL' 카테고리의 다른 글

R 기본  (0) 2020.10.05