알고리즘/백준

[백준] 2262번 파이썬 _ 토너먼트 만들기

이숭간 2021. 7. 24. 17:09
728x90

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

 

2262번: 토너먼트 만들기

월드시에서는 매년 n명의 사람들이 모여 월드 크래프트라는 게임의 토너먼트 대회를 치른다. 이 게임은 특성상 실력만이 승패를 좌우하기 때문에, 아무리 실력이 엇비슷한 사람이 시합을 치러

www.acmicpc.net

문제유형 : 그리디

 

문제풀이

  • 랭킹이 가장 낮은사람부터 찾은뒤, 좌우중에 랭킹차가 작은사람과 겨루게 한다. 
    • 랭킹이 가장 낮은사람부터 찾는이유??  :랭킹이 높은사람부터 찾고 랭킹차가 작은 사람과 겨루게하면 다음 라운드에서 만나게될 사람은 이전사람보다 더 랭킹차가 큰 사람일것이므로 그 차이가 점점더 커지게된다.
  • 랭킹이 낮은사람을 찾고 겨루게한뒤에는 해당사람은 무조건 지게되있으므로 pop후에 리스트에서 없애준다.

 

 

정답코드

import sys
input = sys.stdin.readline

n = int(input())

input_list = list(map(int, input().split()))

sorted_list = sorted(input_list, reverse=True)
result = 0

for i in sorted_list[:-1]:
    idx = input_list.index(i)
    if idx==0:
        result += abs(input_list[idx+1]-i)
    elif idx==len(input_list)-1:
        result += abs(input_list[idx-1]-i)
    else:
        result += min(abs(input_list[idx+1]-i),abs(input_list[idx-1]-i))
    input_list.pop(idx)

print(result)