IJY
느리더라도 꾸준히
IJY
전체 방문자
오늘
어제
  • 분류 전체보기 (67)
    • Develop (67)
      • Java (8)
      • Go (0)
      • Test (1)
      • Web (1)
      • HTML, CSS (1)
      • TIL(Today I Learned) (18)
      • SQL (0)
      • Algorithm (27)
      • 회고 (7)
      • Troubleshooting (1)
      • Etc (3)
    • Etc (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 글쓰기

공지사항

인기 글

태그

  • recursion
  • 우테코 온보딩
  • 초기화
  • sort
  • Interceptor
  • 소수 찾기
  • 회고
  • 프로그래머스
  • MVC
  • PostConstruct
  • init
  • object
  • 12921
  • java
  • BufferedReader
  • EntityTransaction
  • html
  • BufferedWriter
  • Class
  • 알고리즘
  • Filter
  • instance
  • 독후감
  • REST Assured
  • stream
  • Spring
  • API 예외 처리
  • 재귀
  • 백준
  • web

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
IJY

느리더라도 꾸준히

Develop/Algorithm

백준 실버V - 2751 수 정렬하기

2022. 7. 26. 09:10

백준 실버V - 2751 수 정렬하기 문제 풀이

 

문제 설명

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

 

문제의 자세한 내용은 해당 링크를 통해 확인 : 문제 링크

 

풀이 코드

import java.io.*;
import java.util.Arrays;
 
public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));   // 입력을 위한 BufferedReader 인스턴스 생성
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); // 출력을 위한 BufferedWriter 인스턴스 생성
        int maxSize = Integer.parseInt(br.readLine());  // 입력받는 크기 저장
        int[] ret = new int[maxSize];   // maxSize 크기의 int 배열 생성
        for(int i = 0; i < maxSize; i++)    // maxSize만큼 반복
            ret[i] = Integer.parseInt(br.readLine());   // 각 인덱스에 값을 저장
        Arrays.sort(ret);   // Arrays 클래스의 sort(int[]) 메서드를 사용하여 정렬
        for(int i : ret)    // 향상된 for문을 사용하여 ret 배열값 순회
            bw.write(Integer.toString(i) + "\n");   // 버퍼에 인덱스 값 + "\n" 내용 추가
        bw.flush(); // 버퍼에 담긴 내용을 출력
        bw.close(); // stream을 close하여 메모리 반환
    }
}

 

문제 해결 전략

이라 쓰고 문제를 보고서 어떻게 풀면 될까?에 대한 생각을 정리한 항목

다른 언어의 경우는 어려울 수 있지만 Java의 경우 정렬이 이미 메서드로 구현이 되어 있기에 입력만 잘 받아서 sort(int[]) 메서드 사용 후 출력만 잘 해주면 될 것이라 생각하고 진행

입력 속도를 생각해서 BufferedReader를 사용하여 입력을 받도록 구현

맨 처음 입력값이 크기이기 때문에 크기부터 입력을 받은 후 입력받은 크기로 int 타입의 배열을 생성

입력받은 크기만큼 반복하면서 int 타입의 배열에 값 할당

Arrays 클래스에 정의된 sort(int[]) 메서드를 사용하여 정렬 (해당 문제에서는 수는 중복되지 않는다는 가정이 있었기에 int 배열을 사용했지만, 입력되는 수는 중복이 올 수 있지만 출력을 할 땐 중복이 없어야 한다는 조건이 있었다면 TreeSet을 사용하여 정렬했을 것 같습니다)

이후 해당 배열의 값을 향상된 for문으로 순회하면 System.out.println() 메서드로 출력

 

이로써 끝이라고 생각했지만 timeout이 발생하며 실패

 

Java의 Scanner와 System.out.println() 메서드의 속도가 BufferedReader 및 BufferedWriter를 사용한 속도와 차이가 크다는 것을 알고 있었기에 일단 이를 활용해 보기로 생각 (Buffered 클래스 관련 글 링크)

이미 입력은 BufferedReader를 사용했기 때문에 출력을 System.out.println()에서 BufferedWriter로 바꿔서 재구현

이후 테스트를 진행한 결과 성공

 

사실 해당 문제를 풀어보면서 BufferedReader와 BufferedWriter 클래스 사용법을 찾아보다가 위 링크로 연결된 글을 작성하게 된 것. 결론적으로 BufferedReader와 BufferedWriter 클래스에 대해 좀 더 알아볼 수 있던 문제였다.

 

추가로 BufferedWriter 클래스로 변경한 다음에도 timeout이 발생했다면 TreeSet으로 바꿔서 시도를 해봤을 것 같다. (성능 비교는 해보지 않았기에 얼마나 차이가 나는지 모르겠다)

 


코드를 업로드해 둔 깃 허브

'Develop > Algorithm' 카테고리의 다른 글

백준 실버V - 17478 재귀함수가 뭔가요?  (0) 2022.07.26
백준 브론즈I - 10989 수 정렬하기 3  (0) 2022.07.26
백준 브론즈II - 5622 다이얼  (0) 2022.07.26
프로그래머스 Lv.1 - 12930 이상한 문자 만들기  (0) 2022.07.26
Java BufferedReader, BufferedWriter 사용법  (0) 2022.07.26
    'Develop/Algorithm' 카테고리의 다른 글
    • 백준 실버V - 17478 재귀함수가 뭔가요?
    • 백준 브론즈I - 10989 수 정렬하기 3
    • 백준 브론즈II - 5622 다이얼
    • 프로그래머스 Lv.1 - 12930 이상한 문자 만들기
    IJY
    IJY
    개발 관련 공부한 내용을 정리하는 블로그입니다. 느리더라도 꾸준히 포스팅을 하려고 노력합니다.

    티스토리툴바