pullwall
Well done! 코딩
pullwall
전체 방문자
오늘
어제
  • 분류 전체보기 (151)
    • 개발환경 (2)
    • java study (21)
    • 백준 단계별 (51)
    • 알고리즘 (3)
    • AI (43)
    • 클라우드 (3)
      • Kubernetes in Google (3)
    • 논문 (5)
    • 리눅스 (1)
    • AWS (4)
    • 수학 (15)
    • 기타 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 자바독학
  • LLM
  • AWS
  • 백준
  • 백준 단계별
  • 자바
  • 정렬알고리즘
  • Google
  • 정렬
  • dataset
  • 논문리뷰
  • 단계별
  • Ai
  • 알고리즘
  • 수학
  • Java
  • pytorch
  • 쿠버네티스
  • 선택정렬
  • Kubernetes

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
pullwall

Well done! 코딩

백준 단계별

[Java] 백준 10989: 수 정렬하기 3

2023. 2. 14. 14:29
728x90

우선 5초의 시간 제한이 있기 때문에

이 문제는 카운팅 정렬로 해결하라고 문제 설명에서 제시하고 있다.

 

또한 시간 초과를 방지하기 위해

BufferedReader와 StringBuilder를 사용하여 최대한 시간 단축을 유도하였다.

 

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

public class Main {
    public static void main(String[] args) throws IOException{
        int[] cnt = new int[10001];

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

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

        for(int i = 0; i<N ; i++){
            cnt[Integer.parseInt(br.readLine())]++;
        }
        br.close();

        StringBuilder sb = new StringBuilder();

        for(int i=1 ; i<10001; i++){
            while(cnt[i]>0){
                sb.append(i).append('\n');
                cnt[i]--;
            }
        }
        System.out.println(sb);
    }
}

 

위 코드는 입력으로 주어진 수들을 카운팅 정렬을 이용하여 정렬하는 기능을 수행한다.

 

먼저, 입력으로 주어지는 수의 최댓값이 10000 이하이므로,

각 수가 몇 번 등장했는지 세기 위해 10001 크기의 배열 cnt를 생성한다.

 

다음으로, BufferedReader 클래스를 이용하여 입력을 받아들인다.

입력의 첫 번째 줄에서는 정렬할 숫자의 개수 N을 읽어들인다.

이후 N번 반복하면서, 입력으로 주어진 수를 읽어서 cnt 배열의 해당 인덱스에 1씩 더해준다.

 

이후, StringBuilder 클래스를 이용하여 정렬된 결과를 생성한다.

for문을 이용해 cnt 배열을 처음부터 끝까지 순회하면서, 해당 인덱스의 수를 순서대로 sb 객체에 추가해준다.

이때, while문을 이용하여 해당 인덱스의 수가 0이 될 때까지 반복한다.

(중복 숫자가 있기 때문)

 

마지막으로, System.out.println() 메소드를 이용하여 sb 객체에 저장된 문자열을 출력한다.

이렇게 하면, 입력으로 주어진 수들을 쉽게 정렬할 수 있다.

 

 


번외로.. 잊어버릴듯 말듯 한 메소드들을 설명하겠다.
 
 

StringBuilder 클래스의 append 메소드는 문자열을 이어붙이는 기능을 제공한다.

이 메소드를 호출하면 문자열이 현재 StringBuilder 객체의 끝에 추가된다.

append 메소드는 매개변수로 문자열, 문자, 숫자, 불리언, 객체 등 다양한 값을 받을 수 있다.

또한, StringBuilder 객체를 반환하므로, 메소드 체이닝을 이용하여 여러 문자열을 이어붙일 수 있다.

 

 

 


Integer.parseInt(br.readLine()) 을 사용하는 이유는??

 

Integer.parseInt(String s) 메소드는 문자열을 정수로 변환하는 기능을 제공한다.

이 메소드를 사용하는 이유는, BufferedReader 클래스를 이용하여 입력을 받을 때, 입력은 기본적으로 문자열로 처리되기 때문이다.

 

따라서, 입력으로 받은 문자열을 정수형으로 변환하려면 Integer.parseInt(String s) 메소드를 사용해야 한다. 이 메소드는 문자열을 정수형으로 변환하여 반환하는데, 이때 문자열이 정수가 아니거나 범위를 벗어난 경우 NumberFormatException 예외가 발생한다.

 
 
728x90

'백준 단계별' 카테고리의 다른 글

[Java] 백준 1427: 소트인사이드  (0) 2023.02.15
[Java] 백준 2108: 통계학  (0) 2023.02.14
[Java] 백준 2751: 수 정렬하기 2  (0) 2023.02.08
[Java] 백준 25305: 커트라인  (0) 2023.02.02
[Java] 백준 2587: 대표값2  (0) 2023.02.02
    '백준 단계별' 카테고리의 다른 글
    • [Java] 백준 1427: 소트인사이드
    • [Java] 백준 2108: 통계학
    • [Java] 백준 2751: 수 정렬하기 2
    • [Java] 백준 25305: 커트라인
    pullwall
    pullwall

    티스토리툴바