본문 바로가기
Programando/Algorithm

JAVA 입출력과 알고리즘

백준 2751번 문제를 퀵 정렬로 풀었는데 시간 초과가 떴다. 다른 분 티스토리에서 퀵 정렬은 최악의 경우 시간 복잡도가 O(n2)가 되기 때문에 퀵 정렬이 아닌 다른 정렬을 써야 한다는 말을 봤고, 셸 정렬 코드로 다시 제출을 했는데 여전히 시간 초과...그러다 입출력에서 시간 초과가 됐을 수도 있겠다는 생각이 들어서 입출력 부분을 바꿨는데 통과되었다.

 

 

[백준] 2751번 : 수 정렬하기 2 - JAVA [자바]

www.acmicpc.net/problem/2751 2751번: 수 정렬하기 2 첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 숫자가 주어진다. 이 수는 절댓값이 1,000,000보다 작거나 같은 정수이..

st-lab.tistory.com

 

Algorithm : JAVA 입출력과 알고리즘


입력 데이터와 출력 데이터가 많을 때

1. Scanner로 입력받았을 경우, 출력은 System.out.println이 아닌 BufferedWriter 혹은 StringBuilder를 써서 출력해야 한다.

System.out.println와 StringBuilder의 차이

 

StringBuilder vs System.out.println :: 마이구미

이번 글의 제목은 "StringBuilder vs System.out.println" 이다. 글의 목적은 알고리즘 문제들의 시간을 줄이는 것이다. 그렇다면 어떻게 줄일 수 있는지 천천히 살펴보자. 대부분 알고 있듯이 System.out.print

mygumi.tistory.com

 

- StringBuilder의 사용

: String과 문자열을 더할 때 새로운 객체를 생성하는 것이 아니라 기존의 데이터에 더하는 방식을 사용하기 때문에 속도도 빠르며 상대적으로 부하가 적다.

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
        Scanner stdIn = new Scanner(System.in);
        StringBuilder sb = new StringBuilder();
		
        int n;
		
        n = stdIn.nextInt();
        int[] array = new int[n];
		
        for(int i = 0; i < n; i++) {
		    
            array[i] = stdIn.nextInt();
		    
        }
    
        for (int i = 0; i < n; i++) {
            
            sb.append(array[i]).append('\n');
            
        }
        
        System.out.println(sb);
        
    }
}

 

2. Scanner보다 BufferedReader를 사용해 입력을 받는 것이 더 빠르다.

Scanner와 BufferedReader의 차이

 

[Java] BufferedReader, BufferedWriter를 활용한 빠른 입출력

BufferedReader/BufferedWriter는 Buffer에 있는 IO 클래스입니다. 입력된 데이터가 바로 전달되지 않고 중간에 버퍼링이 된 후에 전달되됩니다. 출력도 마찬가지로 버퍼를 거쳐서 간접적으로 출력장치로

coding-factory.tistory.com

 

- BufferedReader의 사용

: 입력된 데이터가 바로 전달되지 않고 중간에 버퍼링이 된 후에 전달됩니다. 

/************************** 하나의 데이터만 입력받을 때 **************************/

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;

public class Main {
	public static void main(String[] args) throws IOException {
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in)); //선언
		int i = Integer.parseInt(bf.readLine()); //Int
		
		System.out.println(i);
		
    }
}
/************************** 여러개의 데이터를 입력받을 때 **************************/
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.StringTokenizer;

public class Main {
	public static void main(String[] args) throws IOException {
	    
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		String s = bf.readLine(); // 입력 : 5 3 4 1
		StringTokenizer st = new StringTokenizer(s);
        
		String[] array = s.split(" ");
 
		for (String k : array) {
			System.out.println(k);
		}
    }
}

 

반응형