Baekjoon 문제 풀기 (1181번 : 단어 정렬) Python

1181번 : 단어 정렬

1. 문제읽기


문자열 길이대로 정렬하기, 중복 제거하기

중복을 제거하고 문자열 길이대로 정렬하는 문제이다.

2. 제출 코드


set으로 중복을 제거하는 것은 알았는데 sort 함수랑 어떻게 연결지어야 할지 모르겠었다.
그래서 그냥 if문으로 대충 중복을 제거했는데, 다행히 잘 출력되었다.
처음에 딕셔너리를 쓰려다가 add가 안되는 것을 알고 이차원 배열을 사용했다.
길이가 50을 넘지 않는다는 조건이 있어서 인덱스 값을 문자열 길이로 이용했다.

n = int(input())

arr = ["0"]*51
for i in range(51):
    arr[i] = ["0"]

for _ in range(n):
    word = input()
    arr[len(word)].append(word)

for i in arr:
    if len(i) != 1:
        i.sort()

new_arr = []

for i in range(len(arr)):
    for j in range(len(arr[i])):
        if arr[i][j-1] != arr[i][j]:
            if arr[i][j] != "0":
                new_arr.append(arr[i][j])

for i in new_arr:
    print(i)

3. 공부할 것


sort() 만 써봤었는데, 문자열의 길이로도 정렬 가능했다.
set으로 리스트를 바꿔주고, 그 값을 다시 list로 바꿔주면 중복 제거가 된다.
그 다음 sort로 key = len 조건을 줘서 정렬시키면 된다.
input()으로 입력을 받는 것 보다 sys.stdin.readline()으로 입력을 받으면 더 빠르다.

import sys

n = int(sys.stdin.readline())
arr = []

for i in range(n):
	arr.append(sys.stdin.readline().strip())

set_arr = set(arr)
arr = list(set_arr)
arr.sort()
arr.sort(key = len)

for i in arr:
	print(i)

댓글남기기