코딩테스트

[백준][Python] 9017 크로스 컨트리

yeeejji 2024. 3. 29. 12:10
728x90

구현 / 실버 3

🏃🏻‍♀️

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

 

9017번: 크로스 컨트리

입력 데이터는 표준입력을 사용한다. 입력은 T 개의 테스트 케이스로 주어진다. 입력 파일의 첫 번째 줄에 테스트 케이스의 수를 나타내는 정수 T 가 주어진다. 두 번째 줄부터는 두 줄에 하나의

www.acmicpc.net

 

 

정답 코드

T = int(input())

for _ in range(T):
    N = int(input())
    t = list(map(int, input().split()))
    out = [] # 참가 선수가 6명 미만인 팀 번호 저장
    score = {}

    # 6명 미만인 팀 번호 저장
    for i in t:
        if t.count(i) < 6:
            out.append(i)
        else:
            # 점수 초기화
            score[i] = []
    
    current = 1
    for i in t:
        if i not in out:
            score[i].append(current)
            current += 1

    print(score)
    print(sorted(score, key= lambda x: (sum(score[x][0:4]), score[x][4]))[0])

 

 

코드 설명

 

out: 참가 선수가 6명 미만인 팀의 번호를 저장하는 리스트

score: 팀 번호와 점수를 저장하는 딕셔너리. key = 팀 번호, value = 해당 팀의 점수들

 

우선, 참가 선수가 6명 미만인 팀은 점수 계산에서 제외해주어야 한다.

count()로 선수를 세어 6명 미만이면, out 리스트에 팀 번호를 저장하고

6명이라면 팀 점수를 빈 배열로 초기화한다.

# 6명 미만인 팀 번호 저장
for i in t:
    if t.count(i) < 6:
        out.append(i)
    else:
        # 점수 초기화
        score[i] = []

 

out 팀의 선수들은 제외하고, 나머지 선수들에게 점수를 매긴다.

score의 해당 팀 value 값에 점수를 추가해 준다.

current = 1
for i in t:
    if i not in out:
        score[i].append(current)
        current += 1

 

상위 네 명의 점수의 합이 가장 낮은 팀이 우승이다.

만약 네 명의 점수의 합이 같다면, 다섯 번째 주자의 점수가 더 낮은 팀이 우승이다.

print(sorted(score, key= lambda x: (sum(score[x][0:4]), score[x][4]))[0])

 

 

🙀

꽤 어려웠다,, 혼자 풀었을 땐 코드가 엄청 길었는데 30% 정도에서 계속 틀렸다고 나왔다ㅠ

체감 난이도는 실3 보다 높았음