SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
분류
- 탐욕 알고리즘(greedy)
문제
24시간 운영되는 물류센터에는 화물을 싣고 내리는 도크가 설치되어 있다.
0시부터 다음날 0시 이전까지 A도크의 사용신청을 확인해 최대한 많은 화물차가 화물을 싣고 내릴 수 있도록 하면, 최대 몇 대의 화물차가 이용할 수 있는지 알아내 출력하는 프로그램을 만드시오.
신청서에는 작업 시작 시간과 완료 시간이 매시 정각을 기준으로 표시되어 있고, 앞 작업의 종료와 동시에 다음 작업을 시작할 수 있다.
예를 들어 앞 작업의 종료 시간이 5시면 다음 작업의 시작 시간은 5시부터 가능하다.
입력
첫 줄에 테스트케이스의 수 T가 주어진다. 1<=T<=50
다음 줄부터 테스트 케이스의 별로 첫 줄에 신청서 N이 주어지고, 다음 줄부터 N개의 줄에 걸쳐 화물차의 작업 시작 시간 s와 종료 시간 e가 주어진다.
1<=N<=100, 0<=s<24, 0 < e <= 24
출력
각 줄마다 "#T" (T는 테스트 케이스 번호)를 출력한 뒤, 답을 출력한다.
풀이
- 백준의 회의실 문제와 매우 유사한 문제이다.
- 종료시간이 빠른 순에서 종료시간과 시작시간을 맞추어서 횟수를 카운트한다.
- 먼저 시작 시간대로 정렬한 후 종료시간으로 다시 정렬한다.
- 종료시간이랑 다음 시작시간을 비교하여 풀이한다.
코드
T = int(input())
for test_case in range(1, T + 1):
N = int(input())
time=[]
cnt=1
for _ in range(N):
s, e = map(int, input().split())
time.append([s,e])
time.sort()
sort_time=sorted(time, key=lambda x:x[1])
end = sort_time[0][1]
for i in range(1, N):
if sort_time[i][0]>=end:
cnt+=1
end = sort_time[i][1]
print(f'#{test_case} {cnt}')
'알고리즘 문제풀이 > SWEA' 카테고리의 다른 글
[SWEA 5209번] 최소생산비용 - 파이썬(python) (0) | 2023.03.29 |
---|---|
[SWEA 5203번] 베이비진 게임 - 파이썬(python) (0) | 2023.03.28 |
[SWEA 5201번] 컨테이너 운반 - 파이썬(python) (1) | 2023.03.28 |
[SWEA 5188번] 최소합 - 파이썬(python) (0) | 2023.03.27 |
[SWEA 5189번] 전자카트 - 파이썬(python) (0) | 2023.03.27 |
댓글