1181번: 단어 정렬

첫째 줄에 단어의 개수 N이 주어진다. (1≤N≤20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다.

www.acmicpc.net

 

 

<내 코드>

 

n = int(input())
words = set()
for i in range(n):
    words.add(input())

sortWords = sorted(words, key=lambda x: (len(x), x))

for i in sortWords:
    print(i)

 

단어의 중복을 제거하기 위해 set() 집합을 사용했다. 입력값으로 들어오는 문자열들을 집합에 넣고, sorted 함수를 이용해 각 문자열을 1차로 길이에 따라 정렬하고, 길이가 같다면 2차로 사전의 오름차순으로 정렬하게 코드를 작성했다.

반응형

파이썬에서 정렬 기능을 가진 함수는 크게 sorted(), .sort()를 사용한다.

 

a = [(1, 2), (3, -2), (-4, 9), (5, 7)]


# 아무 인자 없이 sorted()만 사용 했을 경우, 내림차순으로 기본 정렬된다.
b = sorted(a)
print(b) # [(-4, 9), (1, 2), (3, -2), (5, 7)]


# key 인자에 함수를 넘겨주면 해당 함수의 반환값을 비교하여 순서대로 정렬한다.
# 익명함수 lambda 사용한 sorted함수 
c = sorted(a, key=lambda x: x[0])
d = sorted(a, key=lambda x: x[1])
print(c) # [(-4, 9), (1, 2), (3, -2), (5, 7)]
print(d) # [(3, -2), (1, 2), (5, 7), (-4, 9)]


# 첫 번째 인자를 기준으로 오름차순으로 먼저 정렬하고,
# 그 안에서 다음 두 번째 인자를 기준으로 내림차순 또는 오름차순으로 정렬하게 하려면
e = [(0, 2), (0, -1), (3, 5), (7, 2), (1, 1), (1, 0)]

f = sorted(e, key=lambda x: (x[0], x[1])) #오름차순
g = sorted(e, key=lambda x: (x[0], -x[1])) #내림차순
print(f) #[(0, -1), (0, 2), (1, 0), (1, 1), (3, 5), (7, 2)]
print(g) #[(0, 2), (0, -1), (1, 1), (1, 0), (3, 5), (7, 2)]

 

- sorted()의 key 인자로, 내가 기준으로 지정하려는 비교 함수를 넣어준다.

 

- 비교 함수는 익명함수(lambda)도 가능하고, 별도로 함수를 만들어 사용해도 된다.

 

- 비교할 아이템의 요소가 여러개일 경우, 튜플로 순서를 묶어 사용한다. ( - 를 붙이면, 반대로 정렬을 한다.)

반응형

+ Recent posts