반응형

   문제

   https://www.acmicpc.net/problem/10814


이문제에서 나이가 같으면 가입순 즉 안정 정렬이 필요하다는것을 알수있다.

https://hellowoori.tistory.com/48

정렬의 마지막 문제이기도 하니 각 정렬에대한 특징들을 알필요가 있을거 같아서 찾아

봤다.코드는  stable(안정) 정렬인 병합정렬을 사용하였다.

 



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
53
54
55
56
import sys
 
n=int(sys.stdin.readline())
group_list=[]
 
while n>0:
    n-=1
    age,name=sys.stdin.readline().split() #따로받아서 age의 경우 int형으로 바꾸어준다 바꾸지 않을시 문제가생긴다.ex)21,9
    group_list.append([int(age),name])
 
 
######################################################################
#합병정렬
def mergeSort(li):
    if len(li)<=1:
        return li
    mid=len(li)//2
 
    left=li[:mid]
    right=li[mid:]
 
    left1=mergeSort(left)
    right1=mergeSort(right)
 
    return merge(left1,right1)
 
 
def merge(left,right):
    i = 0  # 인자위치
    j = 0
 
    arr = []
 
    while i<len(left) and j<len(right): #왼쪽배열과 오른족 배열이 끝에 닿을때까지
        if left[i][0]<=right[j][0]:#왼쪽의 회원의 나이가 작거나 같다면 (같다면 회원가입순이기때문에)
            arr.append(left[i])
            i+=1
        else:
            arr.append(right[j])
            j+=1
 
    while i<len(left): #위 과정이 끝나고 남은쪽은 차례대로 넣어준다.
        arr.append(left[i])
        i=i+1
    while j<len(right):
        arr.append(right[j])
        j=j+1
 
    return arr
 
 
group_list=mergeSort(group_list)
 
for i in range(len(group_list)):
    print(group_list[i][0],group_list[i][1])
 

cs



반응형

'알고리즘(python) > 정렬' 카테고리의 다른 글

[Python]위상정렬 백준 3665  (0) 2020.04.13
[Python]위상정렬 백준 2252  (0) 2020.04.12
[Python]정렬 백준 1181  (0) 2020.01.02
[Python]정렬 백준 11651  (0) 2020.01.02
[Python]정렬 백준 11650  (0) 2020.01.01
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기