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. 람다함수
람다함수 = 익명함수이다.
조금 더 자세한 사항은 사진을 클릭한 자료에서 볼 수 있다.
#일반함수
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])
이 문제에서는 세번째 경우를 사용하였다.
** 개인 메모
공부하다가 생기는 질문들과 답변을 여기 적어보겠다(이 본문과는 관련된 정보가 아닐 수 있다)
- strip(공백 제거, 특정 문자열 제거)
Python - String strip(), rstrip(), lstrip() 사용 방법 및 예제
Python에서 strip() 함수를 이용하면 문자열의 쓸모 없는 부분을 자를 수 있습니다. Python은 lstrip(), rstrip(), strip()을 제공합니다. Java 등의 다른 언어들도 strip()을 제공하며, 기능은 모두 비슷합니다.
codechacha.com
'[알고리즘] > BOJ' 카테고리의 다른 글
[백준/Python] 8979: 올림픽 (0) | 2023.02.25 |
---|---|
[백준/Python] 14593번: 2017아주대학교 프로그래밍 경시대회(Large) (0) | 2023.02.24 |
[백준/Python] 5533번 : 유니크 (이중리스트에서 중복체크) (0) | 2023.02.24 |
[백준/Python] 1181번: 단어정렬 (0) | 2023.02.22 |
[백준/Python] 10798번 : 세로읽기 (0) | 2023.02.21 |