반응형
https://school.programmers.co.kr/learn/courses/30/lessons/181188
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
[문제 요약]
- (s, e)구간의 x축에 평행하는 직선들의 집합에서 모든 선을 관통하기 위한 y축에 평행하는 직선의 최소 개수를 찾는 문제.
[풀이]
- Greedy하게 풀리는 문제 O(NlogN)에 풀린다.
- e 값을 기준으로 오름차순으로 정렬한 이후, e 보다 크거나 같은 s 값이 나올 때 마다 새로운 선이 필요하다.
(e 값을 기준으로 정렬했기 때문에 n번째의 s 값이 n - k번째의 e 값보다 크다면 같은 범위에 속하지 않음이 자명하다.)
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int solution(vector<vector<int>> targets) {
int answer = 0;
sort(targets.begin(), targets.end(), [&](vector<int> &v1, vector<int> &v2) {
return v1[1] < v2[1];
});
int minVal = -1;
for (int i = 0; i < targets.size(); i++) {
int s = targets[i][0];
int e = targets[i][1];
if (minVal <= s) {
answer++;
minVal = e;
}
}
return answer;
}
반응형
'Algorithm' 카테고리의 다른 글
[프로그래머스] 광물 캐기 (c++) (0) | 2023.06.16 |
---|---|
[프로그래머스] 과제 진행하기 (c++) (0) | 2023.06.15 |
[프로그래머스] 연속된 부분 수열의 합 (C++) (0) | 2023.06.14 |
[프로그래머스] 아방가르드 타일링 (C++) (0) | 2023.06.14 |
[프로그래머스] 두 원 사이의 정수 쌍 (C++) (0) | 2023.06.13 |