[백준] 크로스 컨트리 (9017번)

단간단간·2024년 3월 26일
0

알고리즘 문제

목록 보기
7/106

출처 : https://www.acmicpc.net/problem/9017

python

# 팀은 6명으로 구성. 상위 4명의 점수를 합산.
# 자격을 갖춘 사람(6명 미만인 팀은 제외)은 결승점을 통과한 순서대로 점수를 받음
# 가장 낮은 점수를 받은 팀이 우승. 점수가 동일할 경우 다섯번 째 주자가 더 빨리 들어온 팀이 우승

import sys


def function():
    # T: 테스트 케이스
    T = int(input())

    for _ in range(T):
        num = int(sys.stdin.readline().rstrip())
        arrivals = sys.stdin.readline().split()

        # key: 팀 번호 / value: [인원 수, 상위 4명 점수, 5번째 주자 점수, 상위 4명 점수 합산하기 위애 필요한 카운트 수]
        team_info = dict()

        # 팀 인원수 확인
        for i in range(len(arrivals)):
            if arrivals[i] not in team_info:
                # 첫 주자 들어올 때 초기 세팅
                team_info[arrivals[i]] = [1, 0, 0, 0]
            else:
                team_info[arrivals[i]][0] += 1

        # 팀 별 점수 합산
        score = 1
        for i in range(len(arrivals)):
            if team_info[arrivals[i]][0] == 6:
                team_info[arrivals[i]][3] += 1

                if team_info[arrivals[i]][3] <= 4:
                    team_info[arrivals[i]][1] += score
                elif team_info[arrivals[i]][3] == 5:
                    team_info[arrivals[i]][2] = score

                score += 1

        # 우승자 정보: [우승팀 번호, 우승팀 상위 4명 점수, 우승팀 5번째 주자 점수]
        winner = [0, 6 * num, 0]

        for key, value in team_info.items():
            # 팀원이 6명이 아닌 경우 제외
            if value[0] != 6:
                continue

            # 우승자 교체
            if winner[1] > value[1] or (winner[1] == value[1] and winner[2] > value[2]):
                winner = [key, value[1], value[2]]

        print(winner[0])


if __name__ == "__main__":
    function()
profile
simple is best

0개의 댓글