문제 링크: https://www.acmicpc.net/problem/1181
1181번: 단어 정렬
첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다.
www.acmicpc.net

코드 구상

작성 코드
N = int(input())
words = []
for i in range(N):
word = str(input())
words.append(word)
words = list(set(words))
words.sort()
words.sort(key = len)
for i in words:
print(i)
알아간 점
1. set 함수
- 중복된 단어를 제거하기 위해선 set 함수가 쓰인다. set 함수는 파이썬 집합으로 순서가 없고 (인덱스로 접근하지 못함), 중복이 허용되지 않는다. 따라서 리스트였던 words를 집합을 적용해 중복을 제거한 후, 다시 리스트로 만들어준다.
2. 정렬
- 단어를 길이 순으로 정렬할 때는 sort 메소드에서 key = len 을 입력해주면 된다. ex) list.sort(key = len)
- 단어를 사전 순으로 정렬할 때는 sort()를 사용하면 된다.
3. 코드 작성은 사전 순, 길이 순으로 해야 한다.
- 문제에서 1.길이 순 2. 사전 순으로 쓰여 있어 코드도 처음엔 길이 순, 사전 순으로 짰다. 하지만 틀렸다고 뜨고 사전 순, 길이 순으로 했을 땐 맞았다고 해서 의아했다. 생각해보니 길이 순, 사전 순으로 하면 처음에 길이 순으로 정렬해둔 의미가 없어진다. (사전 순일때 길이 상관 없이 정렬되니,,) 따라서 사전 순, 길이 순으로 해야 사전 정렬 속에서 길이 정렬이 이루어지기 때문에 원하는 출력을 이끌어 낼 수 있다!
*피드백은 언제나 환영입니다 :)
'백준 문제풀이 > 파이썬' 카테고리의 다른 글
| [백준/파이썬] #9506 약수들의 합 (1) | 2024.02.11 |
|---|---|
| [백준/파이썬] #2609 최대공약수와 최소공배수 (0) | 2024.02.09 |
| [백준/파이썬] #2869 달팽이는 올라가고 싶다 (0) | 2024.02.07 |
| [백준/파이썬] #10814 나이순 정렬 (1) | 2024.02.06 |
| [백준/파이썬] #4344 평균은 넘겠지 (0) | 2024.02.04 |