BOJ - 1181

Kaydenna92·2022년 5월 10일
0

Algorithm

목록 보기
2/36

문제보기

  1. 단어의 길이별로 정렬
  2. 단어의 길이가 같다면, 사전순으로 정렬

접근

Point

  1. 단어의 길이별로 정렬
  2. 단어의 길이가 같다면, 사전순으로 정렬
  1. 입력받을 때 단어의 길이도 함께 할당해보기로 함
  2. for문을 이용하여 words라는 list 배열에 (단어의 길이, 단어) 형식으로 저장
  3. 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:])) # lst의 요소들의 처음 두문자(id)를 무시하고 목록을 정렬한다.
print(lst_sorted)

2.
lst = [('Mark',1),('Jack',5),('Jake',7),('Sam',3)]
lst_sorted = sorted(lst, key=lambda x: x[1]) # tuple의 2번째 요소를 통해 정렬하겠다.
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))
    
# 중복을 제거해야 하므로 set 사용 후 list로 다시 형 변환
words = list(set(words))

# lambda + sort()로 정렬 코드
# 정렬하는 key를 word의 길이 다음으로 단어로 지정.
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) # 다시 list 형 변환
words.sort() 
words.sort(key=len) #단어 길이를 기준으로 sort.
 
# 출력
for i in words:
    print(i)

review

  1. 속도가 느리다.
  2. input() 때문인 것 같다.
# input 대체
import sys
input = sys.stdin.readline
profile
persistently

0개의 댓글