[알고리즘]/BOJ

[백준/Python] 15905번: 스텔라(STELLA)가 치킨을 선물했어요 (람다함수 정렬)

개발새발주발 2023. 2. 24. 02:41
728x90

1. 문제 

 

15905번: 스텔라(STELLA)가 치킨을 선물했어요

경인지역 6개대학 연합 프로그래밍 경시대회 shake! 는 아주대학교, 경희대학교, 성균관대학교, 인하대학교, 한국항공대학교, 한양대학교ERICA가 함께하는 대학교 자체 연합 대회이다. shake! 는 매

www.acmicpc.net

 

2. 문제해결

정렬문제이다. 문제는 정렬해야할 대상이 2개라는 것 

이때 문제해결을 쉽게 할 수 있는 함수가 바로 람다함수이다. 

람다함수에 대해서는 아래 자세하게 설명하겠다 


생각해본 알고리즘 

 

- 입력받은 참가자들의 해결한 문제 수와 패널티 총 합을 입력받고 playes(이중 리스트)에 넣기

- playes를 해결한 문제 수 내림차순, 패널티 총 합 오름차순으로 정렬하기 

- playes에서 5등의 해결한 문제 수 변수로 입력받기 

- playes에서 index가 5 이상인 수를 탐색하며 5등의 해결 문제 수와 같으면 출력값 +1씩 해주기 

 

 

3. 코드 

n = int(input())
playes = []
for i in range(n):
    player = list(map(int,input().split()))
    playes.append(player)

playes = sorted(playes, key = lambda x:(-x[0], x[1]))
five = playes[4][0]
ans = 0
for i in range(n):
    if i > 4:
        if playes[i][0] == five:
            ans+=1

print(ans)

 

4. 람다함수

람다함수 = 익명함수이다. 

https://wikidocs.net/22804

조금 더 자세한 사항은 사진을 클릭한 자료에서 볼 수 있다. 

 

#일반함수 
def f(a,b):
    return a+b
print(f(10,20))

#람다함수
f = lambda  x,y : x+y
print(f(10,20))

두 함수는 같은 함수이다. 

 

이 포스팅은 문제 풀이 포스팅이기에

간단히 설명해보자면 람다함수는 코드와 메모리 절약을 위해 나온 함수이다. 그리고 이 람다 함수의 활용도가 높은 문제가 바로 정렬 문제 ! 

 

sorted()함수에 사용하면 위 문제를 쉽게(?)해결할 수 있다. 

# 오름차순 정렬 시 key 
key = lambda x:x[0]
#내림차순 정렬 시 key 
key = lambda x:-x[0]

key 값에 lambda를 사용하면 됩니다 ~ ! 

 

예제 

list1 = [[2,1], [3,0],[1,2],[1,0]]
# list1[0] 부터 오름차순 정렬 
list1 = sorted(list1)

# list1[1] 오름차순 정렬 
list2 = sorted(list1, key = lambda x:x[1])
print(list2)

#list1[0] 오름차순 ,list1[1]내림차순 정렬
list2 = sorted(list1, key = lambda x:(x[0], x[1])

이 문제에서는 세번째 경우를 사용하였다.