프로그래머스

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

programmers.co.kr

 

문제 조건

  • 벽의 길이는 n미터, 롤러의 길이는 m미터
  • 롤러는 벽을 벗어날 수 없음
  • section 배열 안에 들어있는 번호들이 최소의 횟수로 전부 칠해져야함
  • 이미 칠해진 부분은 또 칠해질 수 있음

 

문제 풀이

어차피 이미 칠해진 부분은 또 칠할 수 있기 때문에 n은 무시하였다.

  1. 어디까지 칠해졌는지 확인하기 위해 paintedArea라는 변수를 선언
  2. paintedArea에는 칠해지지않은 section[i]에 롤러의 길이 - 1을 더함으로써 몇 번째 벽까지 칠했는지 저장 후 answer++
  3. paintedArea가 그 다음 section[i]보다 크거나 같다면 이미 해당 구역까지는 칠해졌으므로 continue
  4. paintedArea가 section[i]의 마지막 원소보다 크거나 같다면 다시 칠해야하는 구역을 전부 칠한 것이므로 break
  5. answer 리턴
#include <string>
#include <vector>

using namespace std;

int solution(int n, int m, vector<int> section) {
    int answer = 0;
    int sectionLength = section.size();
    int paintedArea = 0;
    
    for(int i = 0;;i++) {
        if(paintedArea >= section[sectionLength - 1]) break;
        if(paintedArea >= section[i]) continue;
        
        paintedArea = section[i] + m - 1;
        answer++;
    }
    
    return answer;
}

'프로그래머스 > 1레벨' 카테고리의 다른 글

[프로그래머스/C++] 바탕화면 정리  (0) 2023.07.03
[프로그래머스/C++] 달리기 경주  (0) 2023.06.29
[프로그래머스/C++] 추억 점수  (0) 2023.06.29
대충 만든 자판/C++  (0) 2023.02.28
카드 뭉치/C++  (0) 2023.02.28

+ Recent posts