강의로 돌아가기
전현서

정답주의(어이없음 주의.)

겉으로는 어려울 것 같이 보이지만,
막상 이해하면 이 문제가 3단계인것이 의문인 문제입니다.
카메라가 설치될 수 있는 일정한 규칙만 찾아낸다면, 푸는건 간단한 코드로
끝낼 수 있습니다.

일단 간단히 알 수 있는 사실에서 일정한 규칙을 찾을 수 있게 해야합니다.

가설 1 - 카메라가 설치되는 위치.
일단 최소카메라의 대수와 위치를 알 수 있는 걸 보면, 어떤 기준으로 설치되는지 유추하는 것이 가능합니다.
그런데 우리가 유추가능한 위치여야하겠죠?
그럼 2가지의 위치밖에 존재하지 않습니다. 진입구간에 설치하냐 진출구간에 설치하냐는 것입니다.
그 이외의 구간에 설치해도 최소카메라대수를 맞출 순 있겠지만, 그랬으면 이 문제가 헬난이도가 됩니다.
문제의 예시를 보면, 카메라의 위치가 전부 진출지점과 겹친다는 점을 쉽게 알 수 있습니다.
여기서 논리적으로 보자면, 가장 먼저 진입한 차 기준으로 진입로에 카메라를 설치하게 되면, 자신보다 뒤쳐지는 차가
없으므로, 결국 해당카메라에는 자기자신만 찍히게 됩니다. 엄청난 손해입니다. 하지만, 진출로에 설치하게 된다면,
내가 진출하기 전까지, 해당 구간사이에 진입한 차가 있게되면, 해당 차량은 설치된 카메라를 통과한다는 보장은 없지만,
적어도 진출지점이 카메라가 설치된 지점을 지나갈 확률이 있게됩니다. 이런점에서 카메라는 진출지점에 설치되어야합니다.

가설 2 - 처음카메라가 설치되는 위치.
만약 진입순서대로 정렬하여, 처음으로 진입한 차량의 종점기준으로 카메라를 설치하게 된다면,
정답을 완벽히 구해내는 것은 힘들겁니다. 왜냐하면 진입한 차량의 종점 구간 사이에 진입한 차량2가
기존의 차량의 진출지점을 넘어서 진출할 것이라는 보장이 없기 때문입니다.
그래서 이런식으로 풀다가는, 놓치는 부분이 많아집니다.
그럼 지금껏 모은 정보로 처음으로 카메라가 설치되는 위치를 가설을 내릴 수 있게됩니다.
카메라는 항상 진출지점을 기준으로 설치되어야한다. 만약, 가장 먼저 진입한 차량의 종점구간에 카메라가 설치된다면,
중간에 진입한 차량이 진출구간이전에 진출하였다면, 카메라가 단속을 하지 못하게 된다. 어차피 진출한 지점에 카메라를
설치해야한다면, 가장 먼저 진출한 차량지점에 카메라를 설치하게된다. 그럼 모든 위치를 커버할 수 있게된다.
진입지점에서는 카메라를 볼 수 없으므로, 진출지점에는 무조건 카메라가 존재해야한다. 그렇기 때문에 가장 먼저 진출한
순서대로 카메라가 설치되어야한다.

결론

  • 카메라는 먼저진출한지점 순서대로 설치되어야한다.

예외

  • 차량의 진입위치가 설치된 카메라보다 앞이라면, 카메라를 지나치므로 카메라의 추가적인 설치가 필요없다.

이 문제는 위와 같은 결론에 도달해야만, 쉽게 푸는 것이 가능하다.
가만보면, 이게 코딩테스트인지, 아이큐테스트인지 의심이 들게 된다.

알고리즘

  • routes배열을 진출순서대로 오름차순으로 정렬한다.
  • 현재 카메라 설치위치를 나타내는 변수를 선언하고 값은 -30001로 설정한다.
  • routes값을 for문으로 하나씩 탐색한다.
  • 만약 진입구간이 현재 카메라의 설치구간보다 작으면, 그냥 다음 값으로 넘어간다.
  • 아니라면, answer에 1을 더하고, 현재 카메라의 위치를 현재 종점위치로 갱신한다.

routes배열을 진출순서대로 정렬해야하만, 카메라의 위치를 순서대로 구할 수 있게됩니다.
즉 routes[1]기준으로 routes배열을 정렬해야하는 의미입니다.
가장 먼저 진출한 위치에 카메라를 설치해야하므로, 정렬을 하지 않으면, 정확한 답안을 낼 수 없습니다.
진출순서대로 routes를 정렬했기 때문에, for문을 돌렸을 때, 시작위치가 현재 카메라의 위치만 넘었는지만 판단하면 됩니다.
현재 진출지점이 절대로 현재 카메라의 위치를 넘는 경우는 존재하지 않기 때문입니다.
다만 정렬이 되지 않았으면, 그런 경우가 발생하게 됩니다. 그래서 정렬은 필수가 됩니다.

결론만 알게되면, 문제를 푸는건 쉽습니다.
하지만, 이 문제는 코딩테스트의 문제라고 하기엔 논리력과 창의력이 필요한 문제 같습니다.

  • MunoDevelop

    어이없네

    MunoDevelop―2022.03.10 18:26
  • 전현서

    ㅋㅋㅋㅋㅋ

    전현서―2022.03.10 23:22
  • SS

    참고가 많이 되었습니다. 근데 대부분의 코딩테스트가 설계가 어렵지, 코딩은 어렵지 않은 거 같아요. 풀이 방법만 알고나면 참 쉬운데, 막상 결론까지 도달하는 사고과정은 어려운 듯해요.

    SS―2022.12.16 11:09
  • 신정규

    감탄했습니다 크으....

    신정규―2023.04.30 22:57
  • readable-ko

    덕분에 확실하게 이해하고 넘어가네요!

    readable-ko―2023.05.08 14:53
  • 이재용

    ... 개추

    이재용―2023.09.04 21:20
  • Wynter24

    항상 설계에서 애를 많이 먹었는데 글을 차근차근 읽으며 이해 하는데 큰 도움이 되었습니다! 감사합니다:)

    Wynter24―2024.08.23 15:56
0 개의 답변
답변 쓰기
이 입력폼은 마크다운 문법을 지원합니다. 마크다운 가이드 를 참고하세요.