https://www.acmicpc.net/problem/11946
SOLUTION
문제는 크게 어렵지 않지만 데이터를 저장하고 정렬함에 있어 혼돈이 올 수 있다.
acm_icpc 결과 리스트를 [팀][문제 번호][정답 시간, 오답 수]로 3차원 배열을 만들어준다.
정답 시간엔 최댓값 + 1을 넣어준다. 정답이 나오지 않을 경우엔 틀린 문제에 +1을 해준다.
입력 자체가 시간 순으로 들어오므로 AC가 한 번 나온 이후로는 더 이상 틀린 문제를 카운트하지 않는다.
맞힌 문제 내림 차순, 총 시간 오름 차순, 팀 번호 오름차순으로 정렬해준다.
식으로 표현하면 다음과 같다.
grade = sorted(grade[1:], key = lambda x: (-x[1], x[2], x[0]))
PYTHON CODE
n, m, q = map(int, input().split())
acm_icpc = [[[301, 0] for _ in range(m+1)] for _ in range(n+1)] #[정답 시간, 오답 패널티]
for _ in range(q):
time, team, prob, result = input().split()
time = int(time)
team = int(team)
prob = int(prob)
if acm_icpc[team][prob][0] == 301: #아직 못 맞혔을 경우
if result == "AC":
acm_icpc[team][prob][0] = time #최소 정답 시간
else:
acm_icpc[team][prob][1] += 20 #오답 패널티
grade = [[i, 0, 0] for i in range(n+1)] #[팀 번호, 푼 문제, 총 시간]
for team in range(1, n+1):
for prob in range(1, m+1):
if acm_icpc[team][prob][0] != 301:
grade[team][1] += 1 #문제 개수
grade[team][2] += acm_icpc[team][prob][0] #정답 시간
grade[team][2] += acm_icpc[team][prob][1] #오답 패널티
grade = sorted(grade[1:], key = lambda x: (-x[1], x[2], x[0])) #순서대로 정렬
for i in grade:
print(i[0], i[1], i[2])
'Programming [Python] > 백준 알고리즘 솔루션' 카테고리의 다른 글
#298 백준 파이썬 [12852] 1로 만들기 2 - 다이나믹 프로그래밍 (0) | 2019.12.18 |
---|---|
#297 백준 파이썬 [11947] 이런 반전이 (0) | 2019.12.18 |
#295 백준 파이썬 [11945] 뜨거운 붕어빵 (0) | 2019.12.18 |
#294 백준 파이썬 [11944] NN (0) | 2019.12.18 |
#293 백준 파이썬 [11943] 파일 옮기기 (0) | 2019.12.18 |