문제보기
- 단어의 길이별로 정렬
- 단어의 길이가 같다면, 사전순으로 정렬
접근
Point
- 단어의 길이별로 정렬
- 단어의 길이가 같다면, 사전순으로 정렬
- 입력받을 때 단어의 길이도 함께 할당해보기로 함
- for문을 이용하여 words라는 list 배열에 (단어의 길이, 단어) 형식으로 저장
- sort() + 람다 사용 혹은 sort(key=len), sort() 사용
lambda 함수
- 장점
1. 코드가 간단해지고, 메모리를 덜 잡아먹는다.
2. 함수를 선언하면 함수 자체를 메모리에 할당하는데,
람다함수를 쓰면 한번만 사용하고 사라지기 때문에 메모리를 효율적으로 사용할 수 있다.
def 함수이름(매개변수) :
return 결과
-> lambda 매개변수 : 결과
예를 들어서,
def func(x):
return x + 10 이라는 함수를 람다로 표현하면
f = lambda x:x+10
print(f(10))
정렬 함수
- sort()
- sorted()
- 위의 함수에서 key 매개변수를 사용할 수 있다.
- 이를 통해서 자체 정렬순서를 만들 수 있다.
- 여기서 람다함수가 등장.
1.
lst = ['id01', 'id10', 'id02', 'id12', 'id03', 'id13']
lst_sorted = sorted(lst, key = lambda x : int(x[2:]))
print(lst_sorted)
2.
lst = [('Mark',1),('Jack',5),('Jake',7),('Sam',3)]
lst_sorted = sorted(lst, key=lambda x: x[1])
print(lst_sorted)
- [1. 출력결과]
['id01', 'id02', 'id03', 'id10', 'id12', 'id13']
- [2. 출력결과]
[('Mark', 1), ('Sam', 3), ('Jack', 5), ('Jake', 7)]
code_1
N = int(input())
words = []
for _ in range(N):
word = str(input())
word_len = len(word)
words.append((word, word_len))
words = list(set(words))
words.sort(key = lambda word : (word[1], word[0])
for word in words:
print(word[0])
code_2
N = int(input())
words = []
for i in range(N):
words.append(input())
words = set(words)
words = list(words)
words.sort()
words.sort(key=len)
for i in words:
print(i)
review
- 속도가 느리다.
- input() 때문인 것 같다.
import sys
input = sys.stdin.readline