[백준/Python] 20920. 영단어 암기는 괴로워 (람다 함수 개념)

띵슈롱·2023년 10월 19일
0

PS(Problem Solving)

목록 보기
7/17

문제

접근 방식

문제의 조건에 맞게 조건식을 사용해서 시도를 해봤다.

문제 풀이 1

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(정렬할 데이터)
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)])

문제 풀이 2

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])

람다 식을 활용해 다중 값 정렬을 이용해 풀었다.

https://www.acmicpc.net/problem/20920

profile
어떻게 하는겨?

0개의 댓글