문제풀이/BOJ
[Python] BOJ/백준 1181번 단어 정렬
서채리
2021. 6. 29. 17:17
[문제]
https://www.acmicpc.net/problem/1181
1181번: 단어 정렬
첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다.
www.acmicpc.net
[풀이]
정렬할 때 조건에 글자 길이도 필요하기 때문에 입력 단어를 넣을 때 len을 이용해 글자 길이도 리스트 voca_li에 함께 넣어주었다. 또, 같은 단어가 여러 번 입력된 경우에는 한 번씩만 출력해야 하기 때문에 set을 이용해 중복 단어를 삭제했다.
주 핵심은 이중 리스트 정렬 문제였는데
voca_li = [(2, 'it'), (4, 'wait'), (1, 'i') ······]
의 리스트일 때 voca_li[][0]인 숫자를 기준으로 정렬할 때는
voca_li.sort(key=lambda x: x[0])
voca_li[][1]인 문자열을 기준으로 정렬할 때는
voca_li.sort(key=lambda x: x[1])
첫 번째 인자 기준 오름차순 정렬 후 값이 일치할 때 두 번째 인자를 기준으로 오름차순으로 정렬할 경우
voca_li.sort(key=lambda x: (x[0], x[1]))
[코드]
if __name__ == '__main__':
voca_li = []
for _ in range(int(input())):
voca = input()
num = len(voca)
voca_li.append((num, voca))
voca_li = list(set(voca_li))
voca_li.sort(key=lambda x: (x[0], x[1]))
for voca in voca_li:
print(voca[1])