프로그래머스/1레벨
[프로그래머스/C++] 덧칠하기
Koalitsiya
2023. 6. 29. 11:21
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 조건
- 벽의 길이는 n미터, 롤러의 길이는 m미터
- 롤러는 벽을 벗어날 수 없음
- section 배열 안에 들어있는 번호들이 최소의 횟수로 전부 칠해져야함
- 이미 칠해진 부분은 또 칠해질 수 있음
문제 풀이
어차피 이미 칠해진 부분은 또 칠할 수 있기 때문에 n은 무시하였다.
- 어디까지 칠해졌는지 확인하기 위해 paintedArea라는 변수를 선언
- paintedArea에는 칠해지지않은 section[i]에 롤러의 길이 - 1을 더함으로써 몇 번째 벽까지 칠했는지 저장 후 answer++
- paintedArea가 그 다음 section[i]보다 크거나 같다면 이미 해당 구역까지는 칠해졌으므로 continue
- paintedArea가 section[i]의 마지막 원소보다 크거나 같다면 다시 칠해야하는 구역을 전부 칠한 것이므로 break
- 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;
}