HelloMinchan
처음처럼
HelloMinchan
LinkedIn
전체 방문자
오늘
어제
  • 분류 전체보기 (306)
    • Backend (4)
      • NestJS (1)
      • Express (1)
      • Spring (2)
    • Infrastructure (1)
      • AWS (1)
    • Frontend (1)
      • Next.js (1)
    • Language & Runtime (4)
      • Java (2)
      • Node.js (2)
    • Computer Science (8)
      • Computer Networks (3)
      • Operating Systems (4)
      • OOP (1)
    • 독서 (4)
      • 데이터 중심 애플리케이션 설계 (3)
      • 객체지향의 사실과 오해 (1)
    • 회고 (4)
      • Project (2)
      • Career (2)
    • Deprecated (280)

채널

  • GitHub
  • LinkedIn

최근 글

태그

  • 백준
  • 개발자
  • 프로그래밍
  • 알고스팟Python
  • Baekjoon Online Judge
  • 백준Go
  • front-end
  • 백준C++
  • Database
  • 프로그래머스
  • back-end
  • 프로그래머스Python
  • 데이터베이스
  • Algospot
  • 프로그래머스C++
  • 코딩
  • 알고스팟
  • 백엔드
  • 백준Python
  • programmers

최근 댓글

인기 글

hELLO
HelloMinchan

처음처럼

[Baekjoon Online Judge] 백준 2751번 수 정렬하기 2(C)
Deprecated

[Baekjoon Online Judge] 백준 2751번 수 정렬하기 2(C)

2020. 4. 2. 01:26

© 2020 All Rights Reserved. 주식회사 스타트링크

[Baekjoon Online Judge] 백준 2751번 수 정렬하기 2

(C)

(글쓴날 : 2020.04.02)

 


* Baekjoon Online Judge, 백준 2751번 문제 C 언어 풀이입니다.

* 소스 코드의 저작권은 글쓴이에게 있습니다.


 

 

백준 2751번 수 정렬하기 2


1) 문제

문제 링크 : https://www.acmicpc.net/problem/2751

 

2751번: 수 정렬하기 2

첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 숫자가 주어진다. 이 수는 절댓값이 1,000,000보다 작거나 같은 정수이다. 수는 중복되지 않는다.

www.acmicpc.net


2) 풀이 과정

중복되지 않는 수들이 주어질 때, 정렬해서 출력하는 문제입니다.

시간 복잡도가 O(nlogn)인 정렬 알고리즘을 사용해 주시면 됩니다.

 

저의 경우, 언어에 내장되어 있는 정렬 함수를 사용하기보단 C언어로 직접 정렬 알고리즘을 코딩해 보았습니다.

이 문제는 시간 복잡도가 O(nlogn)인 정렬 알고리즘을 적용하면 되므로, 병합 정렬과 퀵 정렬의 선택지가 있지만 퀵 정렬의 경우 최악의 경우에 시간 복잡도가 O(n²)이 될 수 있어 병합 정렬을 이용해 문제를 해결했습니다.


3) 코드

 

* C 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include <stdio.h>
#include <stdlib.h>
 
void merge(int *arr, int p, int q, int r) {
    int i = p;
    int j = q + 1;
    int t = 0;
    int *temp = (int *)malloc(sizeof(int) * (r-p+1));
 
    while (i <= q && j <= r) {
        if (arr[i] <= arr[j])
            temp[t++] = arr[i++];
        else
            temp[t++] = arr[j++];
    }
    while (i <= q)
        temp[t++] = arr[i++];
    while (j <= r)
        temp[t++] = arr[j++];
    i = p;
    t = 0;
    while (i <= r)
        arr[i++] = temp[t++];
 
    free(temp);
}
 
void mergeSort(int *arr, int p, int r) {
    if (p < r) {
    int q = (p + r) / 2;
        mergeSort(arr, p, q);
        mergeSort(arr, q + 1, r);
        merge(arr, p, q, r);
    }
}
 
int main() {
    int N = 0;
 
    scanf("%d", &N);
    int *arr = (int *)malloc(sizeof(int) * N);
    for (int i = 0; i < N; i++)
        scanf("%d", &arr[i]);
 
    mergeSort(arr, 0, N - 1);
 
    for (int i = 0; i < N; i++)
        printf("%d\n", arr[i]);
 
    free(arr);
    return 0;
}

 

저작자표시 비영리 변경금지 (새창열림)

'Deprecated' 카테고리의 다른 글

[Baekjoon Online Judge] 백준 2108번 통계학(Python)  (0) 2020.04.02
[Baekjoon Online Judge] 백준 10989번 수 정렬하기 3(C)  (0) 2020.04.02
[Baekjoon Online Judge] 백준 2750번 수 정렬하기(C)  (0) 2020.04.02
[Docker] Docker 명령어 정리  (0) 2020.04.01
[Baekjoon Online Judge] 백준 7576번 토마토(Python)  (0) 2020.03.31
    'Deprecated' 카테고리의 다른 글
    • [Baekjoon Online Judge] 백준 2108번 통계학(Python)
    • [Baekjoon Online Judge] 백준 10989번 수 정렬하기 3(C)
    • [Baekjoon Online Judge] 백준 2750번 수 정렬하기(C)
    • [Docker] Docker 명령어 정리
    HelloMinchan
    HelloMinchan
    Though you should not fear failure, You should do your very best to avoid it.

    티스토리툴바