문제 링크
1181번: 단어 정렬
첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다.
www.acmicpc.net
정답 코드는 아래와 같습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
#!/bin/python3
N = 51
def solve():
n = int(input())
arr = [set() for _ in range(N)]
for _ in range(n):
a = input()
arr[len(a)].add(a)
for i in range(N):
for item in sorted(arr[i]):
print(item)
solve()
|
cs |
문자열을 정렬하는 문제인데, 몇 가지 자잘한 조건들이 추가로 붙었습니다.
하나는 중복을 제거하는 것이고, 또 하나는 길이도 고려하는 정렬이라는 것입니다.
저는 중복을 제거하기 위해 set 을 이용하였고, 길이에 따라 정렬하기 위해 최대 길이만큼의 list 를 이용하였습니다.
문자 하나의 최대 길이가 50이라고 했으니까 set 51개로 이루어진 arr을 생성합니다.
arr[x] 의 의미는 길이가 x 인 문자들의 set 인 것입니다.
따라서 arr[1] 부터 arr[50] 까지 순서대로 출력한다면 크기에 따라 정렬된 순서가 될 것입니다.
그리고 각 arr[x] 내부의 값은 sorted 함수를 이용하여 정렬하여 출력합니다.
<보충 1>
sorted 함수의 key 값에 규칙을 추가하여 푸는 방식도 있습니다.
이런 방식은 문법이 좀 복잡해보일 것 같아서 사용하지 않았습니다만,
실제 상황에서는 유지보수와 가독성 때문에 key 값에 규칙을 추가하는 것을 선호합니다.
<보충 2>
아래 영상에서는 N 을 20001 로 두고 풀었습니다.
다행스럽게도 20001 >= 51 이기 때문에 문제가 풀렸습니다만, 그렇지 않았다면 틀렸을 것입니다.
제보해주신 jinyoung song 님 감사합니다.
풀이는 아래 영상을 참고 바랍니다.
www.youtube.com/watch?v=5WT6opA_ePk
저작권 라이선스: CC BY (출처만 표시하면 자유롭게 이용 가능)
'백준(BOJ) 문제 풀이' 카테고리의 다른 글
백준 1330번 문제(두 수 비교하기) 파이썬(Python) 풀이 [로밍맨] (0) | 2021.07.02 |
---|---|
백준 1298번 문제(노트북의 주인을 찾아서) 파이썬(Python) 풀이 [로밍맨] (3) | 2021.07.02 |
백준 1157번 문제(단어 공부) 파이썬(Python) 풀이 [로밍맨] (0) | 2021.07.02 |
백준 1152번 문제(단어의 개수) 파이썬(Python) 풀이 [로밍맨] (0) | 2021.07.02 |
백준 1149번 문제(RGB거리) 파이썬(Python) 풀이 [로밍맨] (0) | 2021.07.02 |