Algorithem/백준 PS with code
백준 #3758 - [S3] KCPC : 정렬
jamong5
2023. 6. 12. 11:32
(python3)
3758번: KCPC
입력 데이터는 표준 입력을 사용한다. 입력은 T개의 테스트 데이터로 구성된다. 입력의 첫 번째 줄에는 테스트 데이터의 수를 나타내는 정수 T가 주어진다. 각 테스트 데이터의 첫 번째 줄에는
www.acmicpc.net
딕셔너리 정렬
문제 조건이 많기 때문에 딕셔너리를 활용해서 구현하면 직관적인 코딩이 가능합니다.
딕셔너리를 완성한 후 점수 기준에 맞춰 sorted 와 key 파라미터를 활용해 커스텀한 정렬을 실행해줍니다.
sorted 사용법은 다음 글에 자세히 설명해두었습니다.
[sort] 파이썬에서 커스텀한 기준으로 이터러블한 객체 정렬하기
key 파이썬에서 제공하는 sorted 기능은 key 파라미터로 커스텀한 기준을 부여하여 정렬할 수 있습니다. 파이썬 sort 관련 독스에서도 이를 확인할 수 있습니다. https://docs.python.org/ko/3/howto/sorting.html#k
jamong-5.tistory.com
코드
import sys
def solution(input) :
T = int(input().strip())
def print_my_team_ranking(n,k,t,m) :
# 제출 로그 입력 받아오기
log = []
for _ in range(m) :
log.append(list(map(int,input().split())))
# 팀별 정보를 저장하는 dict 만들어서 채우기
score_dict = {t:{'score_by_quiz':{0:0}, 'last_sub':0, 'sub_cnt':0}}
for time,(i,j,s) in enumerate(log) : #제출순서,팀id,문제번호,점수
if i in score_dict :
score_dict[i]['last_sub'] = time
score_dict[i]['sub_cnt'] += 1
if j in score_dict[i]['score_by_quiz'] :
score_dict[i]['score_by_quiz'][j] = max(s,score_dict[i]['score_by_quiz'][j])
else :
score_dict[i]['score_by_quiz'][j] = s
else :
score_dict[i] = {'score_by_quiz':{j:s}, 'last_sub':time, 'sub_cnt':1}
# 팀별 최종 스코어 계산하기
# f_score,sub_cnt,last_sub,team
for team in score_dict :
fs = 0
for s in score_dict[team]['score_by_quiz'].values() :
fs+=s
score_dict[team]['f_score'] = fs
# 기준에 따라 정렬하기
fsd = sorted(score_dict, key = lambda x : (score_dict[x]['f_score']*-1,score_dict[x]['sub_cnt'],score_dict[x]['last_sub']))
# 우리팀 등수 출력하기
for ans, i in enumerate(fsd) :
if i == t :
print(ans+1)
return
for _ in range(T) :
n,k,t,m = list(map(int,input().split())) # 팀개수, 문제개수, 팀id, 엔트리수
print_my_team_ranking(n,k,t,m)
input = sys.stdin.readline
solution(input)
my solved.ac :
solved.ac
알고리즘 문제해결 학습의 이정표 🚩 Baekjoon Online Judge 문제들의 난이도 및 티어 정보를 제공하는 사이트입니다.
solved.ac