99클럽 코테 스터디 16일차 TIL / 단속카메라

하양이노랑이·2024년 6월 5일
0

단속카메라

학습 키워드 : 정렬, 그리디
문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/42884

문제 설명

고속도로를 이동하는 모든 차량이 고속도로를 이용하면서 단속용 카메라를 한 번은 만나도록 카메라를 설치하려고 합니다.

고속도로를 이동하는 차량의 경로 routes가 매개변수로 주어질 때, 모든 차량이 한 번은 단속용 카메라를 만나도록 하려면 최소 몇 대의 카메라를 설치해야 하는지를 return 하도록 solution 함수를 완성하세요.

제한 조건

  • 차량의 대수는 1대 이상 10,000대 이하입니다.
  • routes에는 차량의 이동 경로가 포함되어 있으며
  • routes[i][0]에는 i번째 차량이 고속도로에 진입한 지점, * routes[i][1]에는 i번째 차량이 고속도로에서 나간 지점이 적혀 있습니다.
  • 차량의 진입/진출 지점에 카메라가 설치되어 있어도 카메라를 만난것으로 간주합니다.
  • 차량의 진입 지점, 진출 지점은 -30,000 이상 30,000 이하입니다.

문제 풀이

1. 진출 시점을 기준으로 정렬

def solution(routes:list):
    ans=0
    routes.sort(key=lambda x:x[1])
    camera=-30001
    for route in routes:
        st,ed=route
        if camera<st:
            ans+=1
            camera=ed
    return ans
 

2. 진입 시점을 기준으로 정렬

def solution(routes:list):
    ans=1
    routes.sort()
    camera=routes[0][1]
    for i in range(1,len(routes)):
        st,ed=routes[i]
        if st>camera:
            ans+=1
            camera=ed
        else:
            camera=min(camera,ed)
    return ans

이 문제는 진출 시점을 기준으로 정렬하는 방법과 진입 시점을 기준으로 정렬하는 방법 두 가지 모두 문제가 풀린다.

코멘트

정렬의 아이디어가 중요했던 문제 풀면서 진입 시점을 기준으로 정렬할지 진출 시점으로 정렬할지 고민했지만 조건을 고려해보면 두 개 다 풀리더라

profile
문풀 백업

0개의 댓글