코딩테스트
[백준][Python] 9017 크로스 컨트리
yeeejji
2024. 3. 29. 12:10
728x90
🏃🏻♀️
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 보다 높았음