[algorithm] 백준 1181 - 단어 정렬
안녕하세요. 심심한 코딩쟁이입니다.
오늘은 백준 1181번 문제 - 단어 정렬 의 풀이를 살펴보도록 하겠습니다.
풀이에 사용한 언어는 Python3 입니다.
문제 해석과 풀이 다 함께 살펴보시죠.
백준 BAEKJOON 1181
반응형
문제 해석
n개의 단어를 입력값으로 받은 다음 길이가 짧은 것 부터 출력을 하되, 길이가 같은 경우엔 사전순으로
출력을 해야하는 문제입니다.
중복되는 단어는 하나만 남기고 제거합니다.
풀이 1
# 1181 단어 정렬
n = int(input())
wordset = set()
for _ in range(n):
wordset.add(input())
wordlist = list(wordset)
for i in range(len(wordset)):
wordlist[i] = [len(wordlist[i]), wordlist[i]]
wordlist.sort()
for i in range(len(wordlist)):
print(wordlist[i][1])
풀이 2
# 1181 단어 정렬
n = int(input())
wordset = set()
for _ in range(n):
wordset.add(input())
wordlist = list(wordset)
wordlist.sort()
wordlist.sort(key = len)
for i in wordlist:
print(i)
풀이 해석 및 팁
이번 문제에서 가장 핵심적인 부분은 바로 리스트의 매서드 sort의 key 옵션입니다.
이 방법을 모르고 똑같은 과정을 머릿속으로 그려보면서 풀이는 작성해본 것이 풀이 1의 결과입니다.
리스트 매서드 sort를 이용해 문제에서 원하는 정렬을 하기 위해서 단어의 길이와 단어를 한 리스트로 묶어서
최종적으로 모아놓을 리스트안에 각각 추가해주면 sort()를 한 번 실행시키는 것 만으로 문제에서 원하는
정렬이 가능해집니다.
하지만 이렇게 번거로운 과정을 거치지않고 바로 문제를 해결 할 수 있는 방법은 바로 sort의 옵션인
key를 사용해주는 것 입니다.
key = len 을 sort() 안에 넣어주면 길이를 정렬 기준으로 보게됩니다.
이를 사용해서 문제에서 원하는 길이가 짧은 순으로 정렬하는 것을 처리할 수 있습니다.
중복되는 단어를 제거하는 것은 애초에 set에 단어들을 추가하면서 중복 제거를 진행하므로 설명은 생략합니다.
여기까지 백준 1181번 단어 정렬 문제 풀이였습니다.
이번 문제의 정답률은 40% 정도 입니다.
아마도 중복되는 문자 제거를 제대로 신경쓰지 않았을 경우와 길이가 같은 경우 사전순으로 정렬하는
부분에서 오류가 발생했을 가능성이 있습니다.
리스트의 매서드인 sort()에 key를 사용하는 방법은 추후에 자세하게 다루도록 하겠습니다.
감사합니다.
반응형
'programming > algorithm' 카테고리의 다른 글
[algorithm] 백준 18870 - 좌표 압축 (0) | 2023.04.19 |
---|---|
[algorithm] 백준 10814 - 나이순 정렬 (0) | 2023.04.18 |
[algorithm] 백준 11651 - 좌표 정렬하기2 (0) | 2023.04.16 |
[algorithm] 백준 11650 - 좌표 정렬하기 (0) | 2023.04.15 |
[algorithm] 백준 1427 - 소트인사이드 (0) | 2023.04.14 |