알고리즘

[그리디] 씨름 선수

오승미 2022. 3. 2. 21:36

📌

 

 

<input>

 

5

172 67

183 65

180 70

170 72

181 60

 

 

# solve:

input 은 키, 몸무게 순대로 주어지고 다른 선수보다 키나 몸무게 둘 중 하나는 커야 하므로,

키나 몸무게 순대로 정렬한 후, 차례차례 비교해 나가면 된다.

만약 키 순대로 정렬한다면 몸무게를 비교해 나가면 되는데,

만약 다른 선수보다 키와 몸무게가 둘다 작다면 출전하지 못한다.

 

 

✔️ code

 

import sys
sys.stdin=open("input.txt", "r")

n=int(input())
body=[]
cnt=0

for i in range(n):
    h, w=map(int, input().split())
    body.append((h, w))

#키 순대로 내림차순 정렬
body.sort(reverse=True)
largest=0   #몸무게
for x, y in body:
    if y>largest:
        largest=y
        cnt+=1

print(cnt)

 

 

>>>

 

키가 가장  큰 선수와 몸무게가 가장 많이 나가는 선수는 무조건 출전 자격을 얻게 된다.

이 조건을 만족하는지가 의문이었는데, 정렬을 하는 이유에 대해 잘 생각해보지 않아서 몰랐던 것 같다.

largest가 0으로 초기화 되어 있고 body는 내림차순 정렬이 되어있기 때문에,

첫 반복에서 키가 가장 큰 선수는 무조건 cnt+=1 이 된다.

또한 반복문에서 몸무게로 비교를 해가기 때문에 몸무게가 가장 많이 나가는 선수 또한 무조건 cnt+=1이 된다.

그리디 알고리즘은 정렬과 차례차례 비교가 포인트인 알고리즘이란 것을 기억하자 !