폴더 분리

This commit is contained in:
2026-02-23 11:14:50 +09:00
parent 4aebd20cf5
commit 0e8e68d12f
45 changed files with 0 additions and 0 deletions

View File

@@ -0,0 +1,79 @@
# 크로스 컨트리
import sys
from collections import Counter
input = sys.stdin.readline
def exclude_team(teams):
excluded = set()
for team in teams:
if teams[team] != 6:
excluded.add(team)
return excluded
def find_winning_team(rank, excluded, team_count, n):
team_score = {i: {"count": 0, "score": 0} for i in range(1, team_count+1) if i not in excluded}
first_5th = {}
now_rank = 0
for r in rank:
if r in excluded:
continue
now_rank += 1
if team_score[r]["count"] >= 4:
if first_5th.get(r, 0) == 0:
first_5th[r] = now_rank
continue
team_score[r]["score"] += (now_rank)
team_score[r]["count"] += 1
winner = {"team": 0, "score": float("inf"), "5th": n+1}
for team in team_score:
if team_score[team]["score"] < winner["score"]:
winner["team"], winner["score"], winner["5th"] = team, team_score[team]["score"], first_5th.get(team, n+1)
elif team_score[team]["score"] == winner["score"] and first_5th.get(team, n+1) < winner["5th"]:
winner["team"], winner["score"], winner["5th"] = team, team_score[team]["score"], first_5th.get(team, n+1)
else:
continue
return winner["team"]
def game():
n = int(input().rstrip())
rank = list(map(int, input().rstrip().split()))
teams = Counter(rank)
excluded = exclude_team(teams)
result = find_winning_team(rank, excluded, len(teams), n)
return result
def solution():
t = int(input().rstrip())
for _ in range(t):
result = game()
print(result)
return
solution()
"""
걸린 시간: 50분 정도(score를 반대로 생각하거나, dictionary keyerror 때문에..) -> dict는 앵간하면 .get()으로 하자.
시간 복잡도: exclude_team()은 Counter 객체 전체를 순회하기 때문에 O(m)이다.
find_winning_team()은 rank 전체를 순회하고 팀 리스트를 순회하는 것인데 set과 dict를 쓰므로 O(1)이라서 전체는 m < n이므로 O(n)이다.
game()은 Counter이므로 O(m)에다가 exclude_team()과 find_winning_team()을 돌리기 때문에 전체는 O(n)이다.
마지막으로 전체 프로그램은 game()을 t번 반복하기 때문에 전체 시간복잡도는 O(t*n)이다.
함수별로 나눠놓으니까 전체 시간복잡도를 계산하는 것이 확실히 편하다.
해설: 먼저 6명이 아닌 팀을 counter로 알아낸 뒤 제외한다. 그 후 rank 리스트를 순차적으로 확인하면서 팀의 총점을 기록한다.
이때, 4등까지만 계산을 하도록 조건을 걸어주고, 팀의 5등이 전체 몇 등인지만 dict에 저장한다.
마지막에 총점을 비교하고, 같다면 5등까지 확인하는 절차를 거쳐서 최종 우승 팀을 결정한다.
"""