2 분 소요

수 정렬하기

문제

N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오.

출력

첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다.

image-20240630012400054

해당 문제는 list배열을 사용하고 Collections.sort의 정렬을 사용한다.

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;

public class Main{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        List<Integer> y = new ArrayList<>();
        int n;
        int x;
        n = sc.nextInt();
        
        for(int i= 0; i < n; i++){
            x = sc.nextInt();
            y.add(x);
        }
        Collections.sort(y);
        for(int i =0; i < n; i++){
            int w = y.get(i);
            System.out.println(w);
        }
    }
}

매서드 찾는 시간 말고는 짧은 시간안에 끝난 문제 였다.

수 정렬하기2

문제

N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오.

출력

첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다.

image-20240630023008561

해당 문제는 오름차순으로 정렬하는 것이다.

그저 정렬하는거라 어쩌피 출력값은 같으니깐 같은걸 쓰면되겠지?

했지만 시간 초과가 나와 다른 매서드를 알아 보았다

알아본 결과

System.out.println();

Scanner sc = new Scanner(System.in);

의 입출력 속도가 느리다는 걸 확인

해당 클래스들을 바꿔주기로 했다,

BufferedReader, BufferedWriter

해당 클래스는

java의 입출력 속도를 향상시키기 위해 사용 되는 클래스들이다.

BufferedReader

스트림에서 문자를 효울적으로 읽게해준다.

주요 메서드

  • BufferedReader(Reader in): 지정된 Reader 객체로부터 버퍼링된 입력 스트림을 생성합니다.
  • String readLine(): 입력 스트림에서 한 줄을 읽습니다. 더 이상 읽을 줄이 없으면 null을 반환합니다.
  • void close(): 스트림을 닫고 관련된 모든 시스템 리소스를 해제합니다.

BufferedWriter

스트림에서 문자를 효율적으로 출력해준다.

주요 메서드

  • BufferedWriter(Writer out): 지정된 Writer 객체로부터 버퍼링된 출력 스트림을 생성합니다.
  • void write(String s): 지정된 문자열을 출력 스트림에 씁니다.
  • void newLine(): 플랫폼의 줄 구분자 문자열을 씁니다.
  • void flush(): 버퍼에 있는 모든 문자를 출력 스트림에 씁니다.
  • void close(): 스트림을 닫고 관련된 모든 시스템 리소스를 해제합니다.
주의

꼭 버퍼같은 자원을 사용하는 클래스의 경우는 명시적으로 닫아주어야한다

그 이유는

자원 : 컴퓨터 성능

데이터 손실 : 남아 있을경우 데이터가 제대로 저장이 안될수가 있음.

파일 시스템 무결성 유지 : 제대로 닫아주지 않으면 시스템에 무결성이 손상될 수가 있음. EX) 다른 프로세서 파일 접근 안될수가 있음, 파일 손상 우려

바꾼 코드들

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

우선 작성하기 편하게 변수명을 br과 bw로 줬다.

전체 코드

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        
        int n = Integer.parseInt(br.readLine());
        List<Integer> y = new ArrayList<>();
        
        for(int i = 0; i < n; i++) {
            int x = Integer.parseInt(br.readLine());
            y.add(x);
        }
        
        Collections.sort(y);
        
        for(int i = 0; i < n; i++) {
            bw.write(y.get(i) + "\n");
        }
        
        bw.flush();
        bw.close();
        br.close();
    }
}

결국 정답이 맞았다.

댓글남기기