교정소
슬라이딩 윈도우 초기검사, map iterator 선언
시나모온
2020. 5. 9. 21:58
문제 링크입니다 : 2020 카카오 여름인턴 3번 문제
슬라이딩 문제 + map 문제가 나왔다.
유형은 거의 2019 카카오 개발자 겨울 인턴쉽 - 징검다리 건너기와 거의 같았다.
시간 압박을 받으면서 문제를 풀어서 실수를 많이 했다.
같은 실수로 인한 다시 시간 낭비를 하지 않기위해서 이 여기에 남긴다.
슬라이딩 윈도우를 설정해서 간격을 최초로 잡으면 잡은 간격에 대해서도
최소 간격이 되는지 살펴보자.
// 2019 카카오 개발자 겨울 인턴십
// 징검다리 건너기
#include <string>
#include <vector>
#include <map>
#define INF 987654321
using namespace std;
int solution(vector<int> stones, int k) {
int answer = 0;
multimap<int, int> m;
multimap<int, int>::iterator iter;
// 최초 구간잡기
for(int i = 0; i < k; i++) {
m.insert({stones[i], -i});
}
int min = INF;
iter = m.end();
int max = (*--iter).first;
// 최초 구간에 대해서 min 확인
if(min > max) min = max;
// 슬라이딩 윈도우 움직이기
for(int i = k; i < stones.size(); i++) {
// 원소 하나 더하고 min 조건이 되도록 과정 수행
iter = m.find(stones[i - k]);
m.erase(iter);
m.insert({stones[i], -i});
iter = m.end();
int max = (*--iter).first;
// min 체크
if(min > max) min = max;
}
answer = min;
return answer;
}
// 1. 최초 구간 만들기
for (...) {
}
// 2. 최초 구간에 대한 min조건 확인하기
if(...) {
min = ...;
}
// 3. 윈도우 움직이기
for (...) {
// 4. 하나 더해주고, min 조건이 되는 과정 수행
// 5. min인지 확인
if(...) {
min = ...;
}
}
그리고 map을 사용하면 습관적으로 iterator도 선언해두자. 분명히 쓸 일이 있다.
map<string, int> m;
map<string, int>::iterator iter;
map은 key는 오름차순으로 자동정렬된다.
multimap의 경우, key가 같으면 value는 내림차순으로 자동 정렬된다.
개발 환경 : vscode
지적, 조언, 질문 환영입니다! 댓글 남겨주세요~