PS/Implementation

[PS][BOJ/1181]-단어 정렬

황빵 2023. 4. 4. 18:19

문제 설명

알파벳 소문자로 이루어진 N개의 단어가 들어오면 아래와 같은 조건에 따라 정렬하는 프로그램을 작성하시오.

  1. 길이가 짧은 것부터
  2. 길이가 같으면 사전 순으로

입력

첫째 줄에 단어의 개수 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)

분류

정렬(sorting), 문자열(string)
문제 링크
소스코드 원본

728x90
반응형