[algorithm] Greedy

markyang92·2021년 11월 4일
0

algorithm

목록 보기
11/13

회의 잡기

  • 회의 시간이 위와 같은데 '최대한 회의 갯수'를 많이 잡는 방법은?
  1. 당연히 회의시간이 긴 회의는 피해야한다.
  2. 그렇다고 회의시간이 짧은 순으로 정렬을한다...? 겹치는게 많다.
  3. 답은 회의 끝나는 시간 순으로 오름차순 정렬을 한다.
  4. end시간이 같을 경우, start 시간이 더 뒤에 시작되는 것이 더 뒤에 인덱스로 정렬한다.★
  5. list [ (s,e) (s,e) (s,e) ... (s,e) ]각 element(시작시간, 종료시간) 을 가진 tuple


    이렇게 짧은 간격으로 채워지는 데, 더 좋은 Optimize 방법 없다!

ATM


정올 도서관


저울

택배

https://jjangsungwon.tistory.com/114


공주 정원

  • https://www.acmicpc.net/problem/2457

    3번 인덱스의 꽃은 3월 1일에 피기 때문에 포함된다.

  • input에서 틀린 날짜를 줄리는 없으므로, (월*100 + 일) 로 저장한다.
    • 예: 3월 1일 = (3 * 100 + 1) = (301)
import sys

if __name__ == '__main__':
    readl=sys.stdin.readline
    N=int(readl())
    times=[0]*N
    for i in range(0,N):
        getline=(list)(map(int,readl().strip().split()))
        s=getline[0]*100+getline[1]
        e=getline[2]*100+getline[3]
        times[i]=(s,e)
    times=sorted(times,key=lambda item: item[0])
    date=301
    idx=0
    maxdate=0
    ans=0
    while (date <= 1130):
        for i in range(idx,N):
            if times[i][0] > date: break
            if times[i][1] > maxdate:
                maxdate=times[i][1]
        if maxdate==date:
            print(0)
            exit(0)
        else:
            date=maxdate
            ans+=1
    print(ans)

profile
pllpokko@alumni.kaist.ac.kr

0개의 댓글