anott
기록
anott
  • 분류 전체보기
    • 오라클
    • SQL
    • 알고리즘
      • 백준저지
      • 프로그래머스
      • SWEA
    • 개발 관련
    • 프론트엔드
      • TypeScript, Next.js
      • React 공식문서 읽기
hELLO · Designed By 정상우.
anott

기록

백준저지 10989번 수 정렬하기 3
알고리즘/백준저지

백준저지 10989번 수 정렬하기 3

2021. 9. 1. 23:30

출처: https://www.acmicpc.net/problem/10989

 

10989번: 수 정렬하기 3

첫째 줄에 수의 개수 N(1 ≤ N ≤ 10,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 10,000보다 작거나 같은 자연수이다.

www.acmicpc.net

 

제출 날짜: 2021년 9월 1일 수요일

 

 

 

생각

문제의 메모리 제한이 8MB라고 적혀 있어서 더이상 못 풀고 있었는데 하단에 자바11은 512MB라고 적혀 있어서 다시 시도하게 되었다.

처음에는 그냥 입력을 쭉 받고 Arrays.sort()를 해서 통과했다. 그런데 다른 사람들 코드와 시간 차이가 많이 나서 확인해보니 대부분 카운팅 정렬을 쓰고 있었다. 입력 개수는 많지만 수는 10000 이하이기 때문에 가능한 방식이었다.

 

 

 

첫번째 코드 - Arrays.sort() 사용

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Arrays;

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());
        int[] numArr = new int[N];
        for (int i = 0; i < N; i++) {
            numArr[i] = Integer.parseInt(br.readLine());
        }
        Arrays.sort(numArr);
        for (int i = 0; i < N; i++) {
            bw.write(numArr[i] + "\n");
        }
        bw.flush();
        bw.close();
    }
}

 

 

두번째 코드 - Counting Sort 사용

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

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());
        int[] numArr = new int[10001];
        for (int i = 0; i < N; i++) {
            int n = Integer.parseInt(br.readLine());
            numArr[n]++;
        }
        for (int i = 1; i < 10001; i++) {
            for (int j = 0; j < numArr[i]; j++) {
                bw.write(i + "\n");
            }
        }
        bw.flush();
        bw.close();
    }
}

 

저작자표시 비영리 (새창열림)

'알고리즘 > 백준저지' 카테고리의 다른 글

백준저지 12927번 배수 스위치  (0) 2021.09.03
백준저지 14889번 스타트와 링크  (0) 2021.09.02
백준저지 2669번 직사각형 네개의 합집합의 면적 구하기  (0) 2021.08.30
백준저지 10163번 색종이  (0) 2021.08.29
백준저지 15656번 N과 M (7)  (0) 2021.08.28
    '알고리즘/백준저지' 카테고리의 다른 글
    • 백준저지 12927번 배수 스위치
    • 백준저지 14889번 스타트와 링크
    • 백준저지 2669번 직사각형 네개의 합집합의 면적 구하기
    • 백준저지 10163번 색종이
    anott
    anott

    티스토리툴바