티스토리 뷰

많이 배정하거나 선택하는 문제를 '활동 선택 문제(Activity Selection problem)'라고 한다.

이 문제가 그리디 알고리즘(탐욕알고리즘)의 전형적인 문제라고 한다.

 

수식으로 그려봤을 때 겹치는 것들을 선택하면 안되는 문제이기 때문에

1. 종료되는 시간을 기준으로 정렬을 했다. sort()함수의 인자 안에 람다를 써주고 기준을 넣어주면 된다.( 리스트의 1번째가 종료시간이므로 x[1]이라고 해줬다.)

2. 다음 순서의 시작이 앞에 것의 종료시간 안에 있다면 그것을 제외시킨다.(pop(0)으로 표현)

3. 겹치지 않는다면 cnt ++해주고 end를 갱신시켜준다.

 

#cnt =1로 초기화한 이유는 제일 빨리 끝나는 것을 선택하고 시작하기 때문


T = int(input())

for tc in range(1,T+1):
    N = int(input())
    dock = [list(map(int, input().split())) for _ in range(N)]
    #끝나는 시간을 기준으로 정렬
    dock.sort(key=lambda x : x[1])
    
    cnt = 1
    end = dock.pop(0) #맨 처음꺼 뽑음

    #다음 시작이 앞의 끝나는 시간안에 있으면 삭제
    while dock:

        if dock[0][0] < end[1]:
            dock.pop(0)

        else:
            cnt +=1
            end = dock.pop(0) #갱신




    print("#{} {}".format(tc,cnt))

'알고리즘 > SWEA' 카테고리의 다른 글

[SWEA] 2819. 격자판의 숫자 이어붙이기  (0) 2021.04.16
[SWEA] 4366. 정식이의 은행업무  (0) 2021.04.16
[SWEA] 5201. 컨테이너 운반  (0) 2021.04.15
[SWEA] 10726. 이진수 표현  (0) 2021.04.13
[SWEA] 5185. 이진수  (0) 2021.04.13
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함