https://school.programmers.co.kr/learn/courses/30/lessons/181188
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
코드
#include <string>
#include <vector>
#include<algorithm>
#include <iostream>
using namespace std;
/*
1. targets 오름차순 정렬
2. start지점과 end지점을 이전과 현재를 비교해 범위 좁혀나가기, 범위에 없으면 answer++
*/
int solution(vector<vector<int>> targets) {
int answer = 0;
sort(targets.begin(), targets.end());
int prevStart = targets[0][0];
int prevEnd = targets[0][1];
for(int idx = 0; idx < targets.size();++idx){
int curStart = targets[idx][0];
int curEnd = targets[idx][1];
if(answer == 0){
answer++; //시작지점 폭격 전제.
continue;
}
if(prevStart <= curStart && prevEnd > curStart){ // 타격 범위 좁혀나가기
prevStart = max(prevStart, curStart);
prevEnd = min(prevEnd, curEnd);
}
else{ // 타격범위에서 벗어날 경우 answer++(타격 카운팅) 및 다음 타격 범위로 초기화
answer++;
prevStart = curStart;
prevEnd = curEnd;
}
}
return answer;
}
풀이 설명 ( 못풀었다면 못푼이유 )
- 타겟의 요소들을 오름차순 정렬 후
- 첫 시작은 타격을 가했다는 전제하에 시작한다. 그리고 그 타격의 범위를 정하고자
이전 인덱스와 현재 인덱스를 비교하며 타격 범위를 좁혀나간다.
- 만일 현재 시작점이 이전 끝점 보다 클 경우 (개구간 허용) 이전의 타격범위에 벗어났기에 다시 타격을 가한다(answer++) 그리고 타격 범위 갱신을 위해 이전 시작점과 끝점을 현재 시작점과 끝점으로 변경한다.
'프로그래머스 > 코딩테스트' 카테고리의 다른 글
| lv2) 영어 끝말잇기 (0) | 2026.05.26 |
|---|---|
| lv2) 스킬트리 [] (0) | 2026.05.26 |
| lv 2) 구명 보트 (with 투포인터, 슬라이딩 윈도우 활용 용도) [다시] (0) | 2026.05.24 |
| lv2) 퍼즐 게임 챌린지[] (0) | 2026.05.23 |
| lv2 ) 귤고르기 (0) | 2026.05.19 |
