
문제 설명
알파벳 소문자로 이루어진 N개의 단어가 들어오면 아래와 같은 조건에 따라 정렬하는 프로그램을 작성하시오.
- 길이가 짧은 것부터
- 길이가 같으면 사전 순으로
입력
첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다.
출력
조건에 따라 정렬하여 단어들을 출력한다. 단, 같은 단어가 여러 번 입력된 경우에는 한 번씩만 출력한다.
문제분석과정
제일 처음으로 정수 n을 입력받는다. arr 는 n개의 문자열을 저장할 수 있는 리스트이다.
arr = [None]*n
for i in range(n):
arr[i] = input()
# ↓
arr = [input() for _ in range(n)]
원래 적은 코드를 아래처럼 최적화 할 수 있다.
다음으로는 Python 의 특정 기준으로 정렬하는방법을 알아보자.
특정 기준으로 정렬하기 위해서 파이썬의 익명함수인 lambda 를 이용해보자.
lambda함수를 간단히 이야기 하자면, 다른 언어의 익명함수와 비슷하게, 한 번만 사용하거고 간단한 한 경우 사용되곤한다.
사용 방법은 매우 쉽다. 아래 코드로 알아아보자, {람다 키워드} 이후 [함수의 매개변수] : {함수의 표현식} 순으로
이때 다른 함수처럼, 매개변수의 # 은 여러개가 가능하다.
#lambda 인자 : 표현
add1 = lambda x : x+1
a = 1
a = add1(a) # a = a+1
print(a) # a = 2
이제 lambda 함수를 알게 되었으니, 파이썬의 정렬 sort(),sorted()를 이용해서 문제를 해결해보자.
sort(),sorted()의 차이점에 대해서는 추후에 포스팅을 하겠다.
sorted() 함수를 사용할 건데, 이 메서드는 인자를 받고 key 값을 설정해서 해당 key 값을 기준으로 정렬을 할 수 있다.
lambda x:(len(x),x) # x 를 넣었을때, 길이와, x 가 튜플로 묶여서 반환된 것이 key 값이된다.
소스코드
n = int(input())
# arr 는 n개의 문자열을 저장할 수 있는 리스트
arr = [None]*n
# arr 리스트의 각 원소에 문자열을 입력받음
for i in range(n):
arr[i] = input()
# arr 리스트를 set 원소를 중복을 제거하고
arr = list(set(arr))
# 길이가 짧은 것부터, 길이가 같으면 사전 순으로 정렬
arr = sorted(arr,key=lambda x:(len(x),x))
for elem in arr:
print(elem)
분류
728x90
반응형
'PS > Implementation' 카테고리의 다른 글
[PS][BOJ/10812]-바구니 순서 바꾸기 (0) | 2023.02.28 |
---|---|
[PS][BOJ/10813]-공 바꾸기 (0) | 2023.02.23 |
[PS][BOJ/2439]-별 찍기-1 (0) | 2023.02.20 |