For Programmer

백준 1181번 파이썬 문제풀이(정렬 - 단어 정렬) 본문

코팅테스트/백준 문제 모음

백준 1181번 파이썬 문제풀이(정렬 - 단어 정렬)

유지광이 2021. 10. 10. 14:22
728x90

 

코드

n = int(input())  # 문자열로 숫자를 입력받는다.

array = []  # 알파벳를 담을 리스트 선언
setArray = set() #중복을 제거할 set함수 선언
for _ in range(n):
    alphabet = input()
    setArray.add(alphabet)  #중복을 제거하며 set함수에 담는다.

for i in setArray: #set함수의 각 문자열에 접근하여
    array.append(i) #각 문자열을 다시 리스트에 담는다

array.sort()  # 1. 사전순으로 정렬
array.sort(key=len)  # 2. 길이대로 정렬


for i in array:
    print(i)

-> 이문제의 핵심은 문제대로 길이부터 정렬하고 사전순으로 정렬을 하면 길이대로 정렬한 부분은 리셋이 된다. 따라서 반대로 사전순으로 정렬을 먼저하고 길이대로 정렬을 해주어야 답을 찾을 수 있다. 위 문제의 케이스 테스트를 살펴보면 1. 사전순으로 우선 정렬을 하면

array 배열에는 ['but', 'cannot', 'hesitate', 'i', 'im', 'it', 'more', 'no', 'wait', 'wont', 'yours'] 과 같이 정렬이 된다.

이상태에서 2. 길이대로 정렬을 하면 ['i', 'im', 'it', 'no', 'but', 'more', 'wait', 'wont', 'yours', 'cannot', 'hesitate'] 로 다시 정렬이 된다. 

 

길이부터 정렬하고 사전순으로 정렬을 하면 사전순으로 정렬하기 위해 sort를 했을때 길이값이 무시가 된채 정렬을 해버리기 때문이다.

728x90
Comments