본문 바로가기
백준

[백준] 1181번 : 단어 정렬 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트

by 우당탕탕 개발자 2023. 7. 13.
728x90
반응형

 

 

1181번: 단어 정렬

첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다.

www.acmicpc.net

 

1. 문제 설명

2. 풀이과정

  1. 입력받은 단어들을 문자열 길이순으로 오름차순 정렬을 한 상태에서 동일한 길이는 또 사전순으로 정렬해야 하므로 각 단어와 문자열의 길이를 딕셔너리로 저장하여 정렬한다.
  2. sys.stdin.readline() 함수로 입력받기 위해 sys 모듈을 불러온다. import sys
  3. 전체 단어의 개수를 입력받는다. N = int(sys.stdin.readline())
  4. 입력받은 단어와 그 길이를 저장할 딕셔너리를 생성한다. d = {}
  5. 단어의 개수만큼 반복하며 for i in range(N)
  6. 단어를 각 줄별로 입력받고 word  = sys.stdin.readline().rstrip()
  7. 각 단어를 key로, 문자열의 길이를 value로 저장한다. d[word] = len(word)
  8. 단어를 입력받을 때는 마지막에 enter를 같이 입력받으므로 rstrip()을 사용해 단어만 가져오고, 각 문자열의 길이는 동일할 수 있으므로 단어를 key로 하여 저장한다.
  9. 각 단어를 우선 사전순으로 정렬한다. d = sorted(d.items())
  10. 다시 value(문자열 길이)를 기준으로 오름차순 정렬한다. 이때 전에 정렬한 결과가 튜플로 묶인 리스트로 반환되므로 이를 고려하며 정렬해야 한다. d.sort(key = lambda x: x[1])
  11. 정렬한 결과를 하나씩 불러오며 단어를 출력한다. for i in d: print(i[0])
반응형

3. 소스코드

import sys

N = int(sys.stdin.readline())

d = {}
for i in range(N):
    word = sys.stdin.readline().rstrip()
    d[word] = len(word)

d = sorted(d.items())
d.sort(key = lambda x: x[1])

for i in d:
    print(i[0])
728x90
반응형