728x90
반응형
SMALL
프로그래머스 문제 풀이: 덧칠하기
문제 링크: 문제 보기
문제 설명:
길이가 n
인 벽이 주어질 때, 특정 구간(section
)을 칠해야 합니다. 롤러의 길이는 m
이며, 최소한의 롤러 사용 횟수로 벽을 모두 칠하는 방법을 구하는 문제입니다.
문제 해결 코드
#include <string>
#include <vector>
using namespace std;
int solution(int n, int m, vector<int> section) {
int answer = 0;
int lastPainted = 0; // 마지막으로 롤러를 사용한 위치
for (int i = 0; i < section.size(); i++) {
if (section[i] > lastPainted) { // 롤러를 새로 칠해야 하는 경우
answer++;
lastPainted = section[i] + m - 1; // 롤러가 칠할 수 있는 범위 갱신
}
}
return answer;
}
코드 설명
- 핵심 알고리즘: 그리디 알고리즘을 활용하여 최소한의 롤러 사용 횟수로 벽을 칠합니다. 가장 앞쪽부터 롤러를 사용하며, 최대한 넓은 영역을 덮는 방식으로 해결합니다.
- 구현 세부사항:
lastPainted
: 마지막으로 롤러를 사용한 위치를 저장하여, 불필요한 롤러 사용을 방지합니다.section[i] > lastPainted
인 경우, 해당 위치부터 새롭게 롤러를 사용하고lastPainted
를 업데이트합니다.- 시간 복잡도 분석:
- 롤러 사용 횟수 탐색: O(s), 여기서
s
는section
의 크기 - 총 시간 복잡도: O(s) (선형 탐색)
결과
이 코드는 최소한의 롤러 사용 횟수를 계산하여 최적의 칠하기 방법을 찾습니다. 불필요한 연산을 줄이고 선형 탐색으로 해결하여 높은 효율성을 가집니다.
다른 접근 방식으로는 deque
를 이용해 남은 구간을 효율적으로 탐색하는 방법이 있으며, 이는 특정 케이스에서 성능을 더 최적화할 수 있습니다.
728x90
반응형
LIST
'programmers' 카테고리의 다른 글
프로그래머스 [연습문제 / 크기가 작은 부분 문자열](C++) -yes6686- 티스토리 (0) | 2025.02.17 |
---|---|
프로그래머스 [연습문제 / 대충 만든 자판](C++) -yes6686- 티스토리 (0) | 2025.02.10 |
프로그래머스 [[PCCE 기출문제] 10번 / 데이터 분석](C++) -yes6686- 티스토리 (1) | 2025.02.07 |
프로그래머스 [[PCCE 기출문제] 9번 / 이웃한 칸](C++) -yes6686- 티스토리 (0) | 2025.02.07 |
프로그래머스 [연습문제 / 공원 산책](C++) -yes6686- 티스토리 (1) | 2025.02.06 |