상세 컨텐츠

본문 제목

프로그래머스 Level 2 - 탑(C++)

학생일기/알고리즘

by jaws99 2019. 10. 12. 23:31

본문

반응형

입력으로 리스트가 들어왔을 때, 자기보다 왼쪽에 있는 값 중 제일 큰 값의 위치를 가진 리스트를 리턴한다.

없으면 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;
}

 

1. 이중 for문

heights.size()는 개수를 리턴하므로 인덱스를 참조하기 위해 -1을 하고, j는 i를 기준으로 하나씩 왼쪽으로 줄여나간다.

큰 값을 발견하면 인덱스(j)를 push하고 종료한다. 발견하지 못하면 if(j==0)을 통해 0을 push한다.

 

2. reverse(answer.begin(),answer.end())

맨 오른쪽 원소를 기준으로 push를 해줬으므로 실제 결과는 값을 뒤집어야 한다.

algorithm 헤더 파일에 정의된 reverse를 사용하면 된다.

 

반응형

관련글 더보기