문제의 조건에 맞게 조건식을 사용해서 시도를 해봤다.
import sys
from collections import Counter
n, m = map(int, sys.stdin.readline().split())
arr = []
ret = []
temp = []
for i in range(n):
word = sys.stdin.readline().rstrip()
if len(word) >= m:
arr.append(word)
# 단어장 원하는 조건으로 가공
cnt = Counter(arr)
for i in range(0, len(cnt)-1):
for j in range(i+1, len(cnt)):
if cnt[i][1] == cnt[j][1]: #단어의 갯수가 같은 경우
if len(cnt[i][0]) == len(cnt[j][0]): #단어의 갯수도 같고 길이도 길경우
temp.append(cnt[i][0])
temp.append(cnt[j][0])
sorted(temp)
ret.append(temp[0])
ret.append(temp[1])
pass
else: #단어의 길이가 다른경우
ret.append(cnt[i][0])
다 푼건 아니고 이렇게 풀다가 이게 맞나 싶어서 고민 좀 하다가 다른 방법이 생각이 나지 않아 다른 사람들은 어떻게 풀었나 검색을 해봤다.
다른 사람들이 푼 방식을 보니까 sorted 함수에 람다식을 활용해 정렬을 했다.
하지만 난 조건식으로 푸는 방식으로 풀고 싶어서 더 찾아봤는데
아직 내 구글링 실력이 부족해서 람다식으로 활용한 풀이 코드 밖에 못 찾았다.
람다 함수의 식은
lambda 매개변수 : 표현식
두수를 더하는 간단한 예제로 람다 함수와 일반 함수를 비교해보자.
def sum(x,y):
return x+y
sum(10,20)
# 결과 30
(lambda x,y : x+y)(10,20)
이렇게 사용하는 방법과
func = lambda x,y: x+ y
func(10,20)
변수에 지정해 주어서 사용하는 방식이 있다.
check = lambda x : 'pass' if x>=70 else 'fail'
sorted()함수는
sorted(정렬할 데이터)
sorted(정렬할 데이터, reverse 파라미터)
sorted(정렬할 데이터, key 파라미터)
sorted(정렬할 데이터, key 파라미터, reverse 파라미터)
key 파라미터
어떤 것을 기준으로 정렬할 것인가?
sorted( ~~ , key=뭐뭐)로 입력하게 되면 해당 키를 기준으로 정렬하여 반환합니다.
reverse 파라미터
해당 파라미터를 이용하면 오름차순으로 정렬할지 내림차순으로 정렬할지 정할 수 있습니다.
디폴트로는 reverse=False로 오름차순으로 정렬이 됩니다.
sorted( ~~ , reverse=True)로 입력하게 되면 내림차순으로 정렬하여 반환합니다.
a = [(1, 2), (5, 1), (0, 1), (5, 2), (3, 0)]
c = sorted(a, key = lambda x : x[0]) # 앞에 값 기준으로 정렬
c = [(0, 1), (1, 2), (3, 0), (5, 1), (5, 2)]
d = sorted(a, key = lambda x : x[1]) # 뒤에값 기준으로 정렬
d = [(3, 0), (5, 1), (0, 1), (1, 2), (5, 2)]
# 람다 식을 활용해 다중 값 정렬도 가능하다.
e = sorted(a, key = lambda x : (x[0], -x[1]))
=> [(0, 1), (1, 2), (3, 0), (5, 2), (5, 1)]
f = sorted(a, key = lambda x : -x[0])
=> [(5, 1), (5, 2), (3, 0), (1, 2), (0, 1)])
import sys
from collections import Counter
n, m = map(int, sys.stdin.readline().split())
arr = []
for i in range(n):
word = sys.stdin.readline().rstrip()
if len(word) >= m:
arr.append(word)
# 단어장 원하는 조건으로 가공
cnt = Counter(arr)
ret = sorted(cnt.items(), key = lambda x: (-x[1], -len(x[0]), x[0]))
for i in range(len(ret)):
print(ret[i][0])
람다 식을 활용해 다중 값 정렬을 이용해 풀었다.