링크 : https://www.acmicpc.net/problem/9017
9017번: 크로스 컨트리
입력 데이터는 표준입력을 사용한다. 입력은 T 개의 테스트 케이스로 주어진다. 입력 파일의 첫 번째 줄에 테스트 케이스의 수를 나타내는 정수 T 가 주어진다. 두 번째 줄부터는 두 줄에 하나의
www.acmicpc.net
- 문제
- 소요시간: 30분 초과(실패)



- 설계하기(접근방법)
1. 입력받기
먼저 테스트 케이스를 입력받는다
그 후 순위표를 입력받는다
2. 구현하기
최대 팀은 200팀이니, 팀원 수가 6명보다 작은 팀은 모두 리스트에서 제거해버리고
진짜 순위표를 만들고, 계산할 팀명의 리스트를 만든다
계산한 팀명의 리스트를 기준으로
그 팀명과 같은 팀인 선수들의 점수를 4명까지만 더해 나간다
추가로 그 팀의 5번째 선수의 인덱스를
팀별 점수표에 저장한다
팀별 점수표가 만들어지면
람다식으로 팀 점수가 작은, 5번째 선수의 인덱스가 작은 순서대로
정렬을 한다
3. 출력하기
점수표의 첫번째 팀을 출력한다
- 코드(출력)
t = int(input())
for i in range(t):
n = int(input())
rank_list = list(map(int, input().split()))
real_teams = []
for j in range(1,201):
checker = 0
for k in rank_list:
if j == k :
checker += 1
if checker < 6:
while j in rank_list:
rank_list.remove(j)
else:
real_teams.append(j)
winner_list = []
for j in real_teams:
player_cnt = 0
team_score_tmp = 0
for k in range(len(rank_list)):
if j == rank_list[k]:
player_cnt +=1
if player_cnt < 5:
team_score_tmp += (k + 1)
if player_cnt == 4:
team_score = team_score_tmp
if player_cnt == 5:
winner_list.append([j,team_score,k + 1])
break
team = sorted(winner_list, key=lambda x:(x[1], x[2]))
print(team[0][0])
- 얻어갈 부분
1. 문제의 조건에는 점수가 작아야 승리하는 것인데, if 문에는 점수가 크면 winner로 설정하여 시간을 오래 썼다
2. lambda 식을 사용하여 정렬하면 시간을 상당히 아낄 수 있는데, 직접 정렬을 해나가니 논리적 오류도 발생하고 시간을 오래 썼다. lambda식을 적극적으로 사용하자
'알고리즘(백준) > 구현' 카테고리의 다른 글
| [알고리즘/구현] 10709번 : 기상캐스터 - python (1) | 2023.12.28 |
|---|---|
| [알고리즘/구현] 1205번 : 등수 구하기 - python (0) | 2023.12.28 |
| [알고리즘/구현] 10431번 : 줄세우기 - python (0) | 2023.12.26 |
| [알고리즘/구현] 11723번 : 집합 - python (1) | 2023.12.26 |
| [알고리즘/구현] 2979번 : 트럭주차 - python (0) | 2023.12.26 |