반응형
https://www.acmicpc.net/problem/7507
7507번: 올림픽 게임
각 테스트 케이스마다 "Scenario #i:"를 출력한다. 여기서 i는 테스트 케이스 번호이며 1부터 시작한다. 그 다음 줄에는 상근이가 참석할 수 있는 경기의 최대 개수를 출력한다. 문제에서도 설명했지
www.acmicpc.net
해결 방법 : 그리디
- 끝나는 시간으로 정렬을 한 뒤에 탐욕적으로 참석 가능한 경기를 보면 된다.
- 현재 경기의 end time <= 다음 경기의 start time이면, day, start, end 값을 다음 경기 기준으로 갱신
- 현재 경기와 다음 경기가 서로 다른 day면 고려할 필요 X
import sys
input = sys.stdin.readline
def solution(m, matches):
answer = 1
matches.sort(key=lambda x : (x[0], x[2])) # day, end time으로 정렬
d, s, e = matches[0] # day, start, end
for i in range(1, m):
if d != matches[i][0] or e <= matches[i][1]: # 다음 경기 참석 가능
d, s, e = matches[i] # day, start, end 갱신
answer += 1
return answer
if __name__ == '__main__':
T = int(input())
for t in range(T):
m = int(input())
matches = [tuple(map(int, input().split())) for _ in range(m)]
result = solution(m, matches)
print(f'Scenario #{t + 1}:\n{result}\n')반응형
'IT study > 알고리즘 문제 풀이' 카테고리의 다른 글
| 백준 13460 : 구슬 탈출 2 (0) | 2021.09.05 |
|---|---|
| 백준 9009 : 피보나치 (0) | 2021.08.19 |
| 백준 1003 : 피보나치 함수 (백준 4150 : 피보나치 수) (0) | 2021.08.17 |
| 백준 16156 : 장애물 달리기 (1) | 2021.08.16 |
| 백준 1027 : 고층 건물 (0) | 2021.08.14 |