[백준 1181] 단어 정렬_Python

코뉴·2021년 1월 26일
0

백준🍳

목록 보기
11/149

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

🥚문제


🥚입력/출력


🍳코드

# 단어 정렬
# 1. 길이가 짧은 것부터
# 2. 길이가 같으면 사전 순으로
import sys

n = int(sys.stdin.readline())
words = [[] for _ in range(51)] # 길이 n인 문자열은 words[n] 안에 저장된다.

for i in range(n):
    word = sys.stdin.readline()[:-1] # 뒤 \n  제거
    if word not in words[len(word)]: # 중복을 피한다
        words[len(word)].append(word) # words[문자열길이] 배열에 단어 삽입
# [[], ['i'], ['no', 'it', 'im'], ['but'], ['wont', 'more', 'wait'],
# ['yours'], ['cannot'], [], ['hesitate'], ... , []]

for wordList in words:
    # 단어가 하나도 들어 있지 않으면 pass
    if len(wordList) == 0:
        continue
    if len(wordList) == 1:
        print(wordList[0])
    else:
        wordList.sort()
        for word in wordList:
            print(word)

🧂아이디어

  • 문자열 다루는 문제였고, 시간 제한이 2초인 걸로 보아 꽤나 시간이 소요될 거라고 생각했기 때문에 sys.stdin.readline()을 사용했다.

  • sys.stdin.readline()을 사용할 때 주의점은 '\n' 까지 읽어온다는 것이다. 따라서 [:-1] 로 개행 문자를 없애줘야 했다.

  • 조건이 있었는데, 길이가 짧은 것부터 오름차순으로 출력하되, 길이가 같은 문자들이 있다면 사전 순으로 출력하라는 요구사항이었다.

  • 길이별로 저장할 수 있도록, 2차원 배열을 만든 뒤 길이를 두 번째 인덱스 값으로 사용했다. 2차원배열[0][길이] 에 지속적으로 문자를 추가해 나갔다.

  • 그 뒤, 출력하는 과정에서 단어가 2개 이상인 배열에 대해서는 sort()를 실행했다. 문자열의 리스트에 sort()를 사용하면 자동적으로 사전순 정렬이 된다.

profile
코뉴의 도딩기록

0개의 댓글