반응형
문제
https://www.acmicpc.net/problem/1181
각 단어의 길이를 비교 후 길이가 같다면 사전순으로 정렬하면된다.
같은단어가 여러번일 경우 한번만 출력한다는 내용까지 잘읽고 출력하면된다.
알파벳 소문자로만 이루어진 단어이기때문에 비교조건에 특별히 char형으로 바꾸어 비교
할 필요는 없을거같다.
정렬방법은 단어가 많지않아 기본정렬로도 가능할거 같지만 병합정렬을 사용하였다.
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 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 | import sys n=int(sys.stdin.readline()) word_list=[] while (n>0): n-=1 word_list.append(list(sys.stdin.readline().strip())) #길이비교후 #길이같으면 글자비교 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 len(left[i])<len(right[j]):#한쪽이 더길면 arr.append(left[i]) i+=1 elif len(left[i])==len(right[j]):#길이가 같을때 for c in range(len(left[i])):#길이만큼 반복함 if left[i][c]<right[j][c]:#각 단어비교 arr.append(left[i]) i+=1 break elif left[i][c]>right[j][c]: arr.append(right[j]) j+=1 break if c == len(left[i])-1: # 끝까지 비교해 두단어가 같다면 arr.append(left[i]) i += 1 break else: arr.append(right[j]) j+=1 while i<len(left): arr.append(left[i]) i+=1 while j<len(right): arr.append(right[j]) j+=1 return arr word_list=mergeSort(word_list) before=""#이전단어 for i in range(len(word_list)): if before==word_list[i]:#같은 단어라면 건너뛴다. continue for j in range(len(word_list[i])): print(word_list[i][j],end="") print() before=word_list[i] | cs |
반응형
'알고리즘(python) > 정렬' 카테고리의 다른 글
[Python]위상정렬 백준 2252 (0) | 2020.04.12 |
---|---|
[Python]정렬 백준 10814 (0) | 2020.01.02 |
[Python]정렬 백준 11651 (0) | 2020.01.02 |
[Python]정렬 백준 11650 (0) | 2020.01.01 |
[Python]정렬 백준 1427 (0) | 2020.01.01 |
최근댓글