[코딩테스트] 프로그래머스(3단계)-단속카메라

kysung95·2021년 5월 23일
1

코딩테스트

목록 보기
8/10

안녕하세요. 김용성입니다.
오늘은 풀었던 코딩테스트 문제 중 난이도가 높다고 명시되어있었지만 생각보다 간단하게 해결할 수 있었던 프로그래머스의 단속카메라 문제에 대해서 포스팅해보도록 하겠습니다.

문제

프로그래머스-단속카메라

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

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

제한사항

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

routes
[[-20,15], [-14,-5], [-18,-13], [-5,-3]]

return
2

-5 지점에 카메라를 설치하면 두 번째, 네 번째 차량이 카메라를 만납니다.

-15 지점에 카메라를 설치하면 첫 번째, 세 번째 차량이 카메라를 만납니다.

풀이

처음에는 3단계 문제라고 겁을 먹은 채로 시작하였고, 음 범위는 어떤식으로 처리해야지? 라는 생각에 갇혀있었던 것 같아요. 그렇지만 차근차근 생각해보니 routes 안을 배열의 2번째 요소(끝점)으로 정렬해준 뒤 시작점과 끝점들에 대해서만 고려해주면 된다는 결론이 섰고, 그 점을 이용해서 쉬운 해결책을 찾을 수 있었습니다.

문제에 주어진 테스트 케이스 [[-20,15], [-14,-5], [-18,-13], [-5,-3]] 를 예로 들고 그림으로 표현하면 다음과 같이 됩니다.

그림이 이해되시나요?
끝점으로 sort를 처리해준 뒤, 카메라의 값은 문제에서 주어진 차량 진입 지점의 최소값 -30000보다 작은 값인 아무 값이나 할당을 해줍니다.
그 후에 카메라의 값이 진입 지점보다 작은 경우 진출 지점 값으로 지정(진출 지점에 대해 검사해도 해당 route는 검사가 가능하므로)해 주는 반복문을 작성하면 끝입니다. 생각보다 간단하죠?

최종 코드

def solution(routes):
    answer = 0
    routes.sort(key=lambda x:x[1])
    camera=-30001
    
    for route in routes:
        if camera<route[0]:
            camera=route[1]
            answer+=1  

  return answer

🙌 마무리

3단계 문제이고, 효율성 체크가 포함된 문제여서 즈레 겁을 먹었었지만, 간단하게 풀 수 있는 문제였습니다.
개인적으로 이런 문제가 복잡한 코드 없이 참신한 생각을 길러주는 것 같아 좋습니다:)
포스팅 읽어주셔서 감사합니다.

profile
김용성입니다.

0개의 댓글