728x90
https://school.programmers.co.kr/learn/courses/30/lessons/42884
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
728x90
메모리: 58.3 MB, 시간: 9.76 ms
사용 알고리즘: 탐욕법(Greedy)
routes
를 나가는 시간 기준 오름차순으로 정렬한다.- 가장 먼저 나가는 차량의 나가는 시간을
out
에 저장하고,out
에 cctv를 설치해 준다. - 다음 차량 배열들을 확인한다.
out
이전에 들어오는 차량들은out
에 설치된 cctv와 만나게 되므로 그냥 보낸다.
(routes
가 나가는 시간 오름차순으로 정렬되어 있기 때문에, 들어오는 시간만out
이전인지 확인해 주어도 나가는 시간은 무조건out
이후이므로out
에 설치된 cctv와 만나게 된다.)- 배열을 확인하다가
out
이후에 들어오는 차량을 발견하면, 해당 차의 나가는 시간에 새로 cctv를 설치해 준다.
즉, 해당 차의 나가는 시간을out
에 다시 저장해 주고, 3번 과정부터 다시 실행
import java.util.*;
class Solution {
public int solution(int[][] routes) {
// 끝나는 순으로 정렬
Arrays.sort(routes, (o1, o2) -> o1[1] - o2[1]);
// 필요한 CCTV 개수
int answer = 0;
// 하나의 cctv 설치 이후 처음 들어온 차량의 나가는 시간
int out = -30_001;
for(int[] car : routes) {
// out에 cctv를 설치해줄 거임
// out보다 먼저 들어온 차량은 out에 cctv를 설치함으로써 경로에 cctv가 하나 이상 생기게 됨
// out보다 늦게 들어온 차량은 또 다른 cctv를 설치해주어야 함
// out보다 늦게 들어온 차량 발견 시,
// out에 cctv 설치해줌
if(out < car[0]) {
answer++; // cctv 설치
out = car[1]; // 새로운 cctv 설치 장소 저장
}
}
return answer;
}
}
728x90
'Problem Solving > Programmers' 카테고리의 다른 글
[프로그래머스, 12944] 평균 구하기 (java) (0) | 2024.08.14 |
---|---|
[프로그래머스, 49995] 쿠키 구입 (java) (0) | 2024.08.13 |
[프로그래머스, 42842] 카펫 (java) (0) | 2024.08.12 |
[프로그래머스, 12937] 짝수와 홀수 (java) (0) | 2024.08.12 |
[프로그래머스, 17685] [3차] 자동완성 (java) (0) | 2024.08.11 |