백준 문제풀이/파이썬

[백준/파이썬] #1181 단어 정렬

꽌 2024. 2. 5. 01:09

문제 링크: 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. 사전 순으로 쓰여 있어 코드도 처음엔 길이 순, 사전 순으로 짰다. 하지만 틀렸다고 뜨고 사전 순, 길이 순으로 했을 땐 맞았다고 해서 의아했다. 생각해보니 길이 순, 사전 순으로 하면 처음에 길이 순으로 정렬해둔 의미가 없어진다. (사전 순일때 길이 상관 없이 정렬되니,,) 따라서 사전 순, 길이 순으로 해야 사전 정렬 속에서 길이 정렬이 이루어지기 때문에 원하는 출력을 이끌어 낼 수 있다!

 

 

 

*피드백은 언제나 환영입니다 :)