본문 바로가기

Coding test

[백준 1181/파이썬] 단어정렬/sort()/lamda()

 

 

소스코드

N = int(input())
wordlist = []
for i in range (N):
  word = input()
  wordlist.append(word)

wordlist = list(set(wordlist))
wordlist.sort()
wordlist.sort(key=lambda x : len(x))

for i in range (len(wordlist)):
  print(wordlist[i])

 

문제 해결 알고리즘

1. 중복 제거

list() -> set() -> list()형 변환

 

2. 파이썬 내장함수 sort() 사용

[sort() 함수]

기본형태 : 정리하고싶은리스트.sort()

입력된 숫자나 문자를 오름차순으로 정렬해주는 함수입니다.

만약 내림차순으로 정리하고 싶으면 sort(reverse = True)사용하면 됩니다.

ex) 내림차순으로정리하고싶은리스트.sort(reverse = True)

 

[sorted()함수]

기본형태 : sorted(정렬하고싶은리스트)

sort함수와 헷갈리기 쉬운 sorted() 함수입니다.

sorted()함수는 리스트를 새롭게 반환합니다. 

따라서 new_list = sorted(정렬하고싶은리스트) 형태로 작성하면 됩니다.

 

공통점 : list를 정렬해줌

차이점 :

sort()는 원래 리스트가 바뀌고 원래 리스트를 리턴

sorted()는 원래 리스트는 보존되고 새로운 리스트를 반환해줌

 

3. lamda함수

기본형태 : lamda(x : x+10)

이런 식으로 직접 함수를 정의하지 않고 가볍게 연산식을 사용할 때 유용합니다.

x를 넣으면 x+10을 반환하는 간단한 식이죠!

이번 문제에서는 sort(lamda x: len(x))로 sort함수에 사용했는데요

x 즉, list에 있는 애들을 len(x) "길이에 대해 정렬해줘" 라는 뜻으로 사용했습니다. 

 

특이사항

분명 다 맞았는데.. 하고 생각했는데 런타임 에러가 나왔습니다.. 

for i in range (len(wordlist)):
  print(wordlist[i])

출력 부분에서 range를 N으로 해서 오류가 났었던 것이었습니다.

왜냐하면 중복되면 삭제하는 알고리즘을 짰기 때문에 indexError가 난 것이었습니다.

이거 때메 앞으로는 고생하지 않기로 ~

'Coding test' 카테고리의 다른 글

[백준/2606/파이썬] 바이러스  (0) 2023.01.03
[백준/2178/파이썬] 미로탐색  (0) 2023.01.02
[백준/2644/파이썬] 촌수계산  (0) 2023.01.01
[백준 7569/파이썬] 토마토  (0) 2022.12.31
[백준 9012/파이썬] 괄호  (0) 2022.12.29