누룽지맛치킨
어미새의 개발일지
누룽지맛치킨
전체 방문자
오늘
어제
  • 분류 전체보기 (86)
    • 코틀린 (8)
    • 안드로이드 (5)
      • 디자인 (2)
      • 개발 (2)
      • 도구 (1)
    • 피그마 (1)
    • 대외활동 (0)
    • 프로젝트 (0)
    • 백준 (55)
      • JAVA (55)
    • 알고리즘 (3)
    • 클라우드 (5)
    • 스터디 (2)
      • 코테 (2)
    • 자료구조 (5)
    • 컴퓨터 기술 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 클라우드
  • 백준 자바 누적합
  • 안드로이드
  • 자바 Priority Queue
  • 백준 자바 벌집
  • 백준 자바 정렬
  • 백준 자바 2559번
  • 코틀린 runBlocking
  • 자료구조
  • 코틀린 인 액션
  • 알고리즘 조합
  • 코틀린
  • 백준 자바
  • Room version 올리기
  • 백준 자바 2292번
  • 백준 자바 수열
  • 클라우드 컴퓨팅
  • 안드로이드 디자인
  • Room Migration
  • 백준 자바 다이나믹 프로그래밍

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
누룽지맛치킨
백준/JAVA

[백준/JAVA] 2751번 수 정렬하기2

백준/JAVA

[백준/JAVA] 2751번 수 정렬하기2

2023. 1. 21. 21:08
  • 시간 복잡도가 O(nlogn)인 정렬 알고리즘으로 풀 수 있습니다. 예를 들면 병합 정렬, 힙 정렬 등이 있지만, 어려운 알고리즘이므로 지금은 언어에 내장된 정렬 함수를 쓰는 것을 추천드립니다.
    https://www.acmicpc.net/problem/2751

1. 문제

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

2. 문제 접근

1) 수의 개수 N을 입력받는다.
2) N만큼 반복하며 정수를 입력받고 이를 배열에 저장한다.
3) 배열에 저장된 수들을 병합정렬을 이용하여 오름차순으로 정렬한다.
4) 정렬된 배열을 출력한다.

병합정렬

  • 리스트 길이가 0 또는 1이면 이미 정렬된 것으로 간주.
  • 정렬 되지 않은 리스트는 절반으로 나누어 2개의 리스트로 분할한다.
  • 각 부분 리스트를 재귀적으로 합병 정렬을 이용해 정렬한다.
  • 다시 하나의 정렬된 리스트로 합병한다.
    참고 :https://velog.io/@agfalcon/%EB%B3%91%ED%95%A9%EC%A0%95%EB%A0%AC

3. 코드

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


//병합 정렬 사용
public class Main {    
    static int data[];
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());
        int array[] = new int[N];
        data = new int[N];
        for(int i=0;i<N;i++) {
            array[i] = Integer.parseInt(br.readLine());
        }
        MergeSort(array, 0, N-1);
        StringBuilder sb = new StringBuilder();
        for(int i=0;i<array.length;i++) {
            sb.append(array[i]).append("\n");
        }
        System.out.print(sb);
    }

    private static void Merge(int[] array, int start, int middle, int end) {
        int i = start;
        int j = middle+1;
        int k = start;
        while(i<=middle && j<=end) {
            if(array[i]<array[j]) {
                data[k] = array[i];
                i++;
            }
            else {
                data[k] = array[j];
                j++;
            }
            k++;
        }
        if(i>middle) {
            for(int t = j;t<=end;t++) {
                data[k] = array[t];
                k++;
            }
        }
        else {
            for(int t = i;t<=middle;t++) {
                data[k] = array[t];
                k++;
            }
        }
        for(int t=start;t<=end;t++) {
            array[t] = data[t];
        }
    }

    private static void MergeSort(int[] array, int start, int end) {
        if(start<end) {
            int middle = (start+end)/2;
            MergeSort(array, start, middle);
            MergeSort(array, middle+1, end);
            Merge(array, start, middle, end);
        }
    }
}

'백준 > JAVA' 카테고리의 다른 글

[백준/JAVA] 1427번 소트인사이드  (0) 2023.02.06
[백준/JAVA] 10989번 수 정렬하기3  (0) 2023.01.21
[백준/JAVA] 2750번 수 정렬하기  (0) 2023.01.21
[백준/JAVA] 반복문을 사용하지 않는 2292번 벌집  (0) 2023.01.21
[백준/JAVA] 2292번 벌집  (0) 2023.01.21
    '백준/JAVA' 카테고리의 다른 글
    • [백준/JAVA] 1427번 소트인사이드
    • [백준/JAVA] 10989번 수 정렬하기3
    • [백준/JAVA] 2750번 수 정렬하기
    • [백준/JAVA] 반복문을 사용하지 않는 2292번 벌집
    누룽지맛치킨
    누룽지맛치킨

    티스토리툴바

    단축키

    내 블로그

    내 블로그 - 관리자 홈 전환
    Q
    Q
    새 글 쓰기
    W
    W

    블로그 게시글

    글 수정 (권한 있는 경우)
    E
    E
    댓글 영역으로 이동
    C
    C

    모든 영역

    이 페이지의 URL 복사
    S
    S
    맨 위로 이동
    T
    T
    티스토리 홈 이동
    H
    H
    단축키 안내
    Shift + /
    ⇧ + /

    * 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.