

우선 stones의 배열의 크기가 20만까지 이므로 O(N^2)으로는 효율성 검사를 통과할 수 없다.
그래서 set을 이용하여 풀어보았다.
코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
#include <string>
#include <vector>
#include <iostream>
#include <set>
using namespace std;
multiset<int, greater<int> > s;
int solution(vector<int> stones, int k) {
int answer = 0;
int start = 0;
for(int i=0; i<k; i++)
s.insert(stones[i]);
set<int>::iterator it;
it = s.begin();
int final_max = *it;
for(int i=0; i< stones.size() - k; i++)
{
it = s.find(stones[i]);
s.erase(it);
s.insert(stones[i + k]);
it = s.begin();
if (final_max > *it)
final_max = *it;
}
return final_max;
}
|
cs |
stones 배열에서 앞에서부터 k개 씩 뽑아 연속되는 k개에서 발판의 최댓값을 구하고 n - k + 1개 구간의 최댓값들의 최솟값을 구하면 몇 명이 건너갈 수 있는지 구할 수 있다.
k개 씩 뽑는 이유는 k개의 최댓값을 넘어가는 경우 한 번에 k칸을 뛰어넘을 수 없기 때문에 이러한 방식으로 set에 추가하고 삭제하는 과정을 통해 최댓값의 최솟값을 찾아주면 된다.
'Study > Programmers' 카테고리의 다른 글
프로그래머스 - 키패드 누르기(2020 카카오 인턴십) (0) | 2021.05.04 |
---|---|
프로그래머스 - 오픈채팅방(2019 KAKAO BLIND RECRUITMENT) (0) | 2021.05.03 |
프로그래머스 - 자물쇠와 열쇠(2020 KAKAO BLIND RECRUITMENT) (0) | 2021.04.29 |
프로그래머스 - 괄호 변환 (0) | 2021.04.22 |
프로그래머스 - 문자열 압축(2020 KAKAO BLIND RECRUITMENT) (0) | 2021.04.19 |