본문 바로가기

programming/algorithm

[algorithm] 백준 1181 - 단어 정렬

[algorithm] 백준 1181 - 단어 정렬

 

안녕하세요. 심심한 코딩쟁이입니다.

 

오늘은 백준 1181번 문제 - 단어 정렬 의 풀이를 살펴보도록 하겠습니다.

 

풀이에 사용한 언어는 Python3 입니다.

 

문제 해석과 풀이 다 함께 살펴보시죠.

 

algorithm
알고리즘


백준 BAEKJOON 1181

 

백준 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를 사용하는 방법은 추후에 자세하게 다루도록 하겠습니다.

 

감사합니다.

반응형