입력으로 리스트가 들어왔을 때, 자기보다 왼쪽에 있는 값 중 제일 큰 값의 위치를 가진 리스트를 리턴한다.
없으면 0으로 채운다.
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> solution(vector<int> heights) {
vector<int> answer;
int i,j;
for(i=heights.size()-1; i>=0; i--){
for(j=i; j>0; j--){
if(heights[i] < heights[j-1]){
answer.push_back(j);
break;
}
}
if(j==0) answer.push_back(0);
}
reverse(answer.begin(),answer.end());
return answer;
}
heights.size()는 개수를 리턴하므로 인덱스를 참조하기 위해 -1을 하고, j는 i를 기준으로 하나씩 왼쪽으로 줄여나간다.
큰 값을 발견하면 인덱스(j)를 push하고 종료한다. 발견하지 못하면 if(j==0)을 통해 0을 push한다.
맨 오른쪽 원소를 기준으로 push를 해줬으므로 실제 결과는 값을 뒤집어야 한다.
algorithm 헤더 파일에 정의된 reverse를 사용하면 된다.
[2020카카오공채] 문자열 압축(C++) (0) | 2019.11.13 |
---|---|
프로그래머스 Level 2 - 쇠막대기(C++) (0) | 2019.10.12 |
프로그래머스 Level 1 - 같은 숫자는 싫어(C++) (0) | 2019.10.07 |
프로그래머스 Level 1 - 가운데 글자 가져오기(C++) (0) | 2019.09.29 |
프로그래머스 Level 1 - 시저 암호(C++) (0) | 2019.09.27 |