Deff_Dev

[프로그래머스] 덧칠하기 (C++) 본문

코딩테스트/프로그래머스

[프로그래머스] 덧칠하기 (C++)

Deff_a 2024. 3. 7. 16:40
 

프로그래머스

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

programmers.co.kr

문제

 

이 문제는 m미터의 길이를 가진 롤러로 덧칠해야할 모든 구역을 덧칠할 때 최소 덧칠 횟수를 구하는 문제입니다.

 

첫 구역부터 순서대로 덧칠하고, 덧칠이 안 된 구역부터 다시 덧칠하는 방법으로 문제를 풀이했다.

풀이

#include <string>
#include <vector>
// https://school.programmers.co.kr/learn/courses/30/lessons/161989
using namespace std;

int solution(int n, int m, vector<int> section) {
    int answer = 1; // 최소 1개의 구역 이상이기 때문에 answer = 1
    int draw = section.size(); // 덧칠 해야할 구역 갯수
    
    for(int i = 0; i< section.size(); ){
        for(int j = i; j < section.size(); j++){
            // 덧칠 하지 못한 구역이 있다면 
            if(section[i] + m <= section[j]){
                // 해당 부분부터 다시 덧칠
                i = j;
                break;
            }
            draw--; // 반복문이 반복된 만큼 덧칠해야할 구역 갯수 --
        }        
        if(draw == 0){ // 모든 구역을 덧칠 완료 했다면 break
            break;
        }
        answer++;
    }
        
    return answer;
}