하루하루 꾸준히, 인생은 되는대로

알고리즘

프로그래머스 덧칠하기 C++

긤효중 2023. 3. 3. 13:01

https://school.programmers.co.kr/learn/courses/30/lessons/161989

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


스위핑 문제같아서 스위핑을 사용해서 접근했다

처음구간을 section의 처음으로 잡고 끝 구간을 처음 구간 + m -1로 잡는다

그 후 secion배열을 돌면서 만약 section이 끝 구간 보다 길다면,

새로 덧칠해야 하므로 처음 구간과 끝 구간을 각각 갱신해 주었다

 

#include <string>
#include <vector>


//n미터의 벽

//1부터 N까지 구역

//롤러의 길이는 M임

//3456 -> 1234 
//13
using namespace std;

int solution(int n, int m, vector<int> section) {
    int answer = 0;
    
    vector<pair<int,int>> v;
    //시작과 끝
    int start = section[0];
    int end = start + m - 1;
    v.push_back({start,end});
    
    answer = 1;
    
    for(int i = 0;i<section.size();i++){
        if(section[i] > end){
            answer++;
            start = section[i];
            end = start + m - 1;
        }
    }
    
    return answer;
}