프로그래머스 덧칠하기 JAVA 풀이 (그리디)

2026. 6. 16. 22:50·코테(Solved.ac + Programmers)
728x90

🔗 문제 링크

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr


📌 문제 개요

길이가 n미터인 벽이 있고, 다시 페인트칠해야 하는 구역들이 section 배열로 주어진다.

롤러의 길이는 m미터이며, 한 번 칠할 때 연속된 m개의 구역을 칠할 수 있다.

 

다시 칠해야 하는 모든 구역을 적어도 한 번 이상 칠할 때, 롤러를 사용하는 최소 횟수를 구하는 문제


📌 접근 방법

section 배열은 오름차순으로 정렬되어 있으므로 왼쪽부터 차례대로 확인한다.

현재까지 칠해진 마지막 구역을 end에 저장한다.

 

순회 중인 구역 s가 end보다 작거나 같다면 이미 칠해진 범위 안에 있으므로 넘어간다.

반대로 s가 end보다 크다면 아직 칠해지지 않은 구역이므로, 그 구역부터 롤러를 한 번 사용한다.

 

이때 칠해진 마지막 위치는 s + m - 1이 된다.


📌 핵심 아이디어

if (s > end) {
    answer++;
    end = s + m - 1;
}

end는 현재까지 페인트칠이 완료된 마지막 구역을 의미한다.

예를 들어 m = 4이고 s = 2라면, 2번 구역부터 칠했을 때 2, 3, 4, 5번 구역까지 칠할 수 있다.

 

따라서 end는 2 + 4 - 1 = 5가 된다.

이후 section에서 3번 구역이 나오면 이미 5번까지 칠해져 있으므로 추가로 칠하지 않아도 된다.


📌 전체 코드

class Solution {
    public int solution(int n, int m, int[] section) {
        int end = 0;
        int answer = 0;
        
        for(int s : section){
            if(s > end){
                answer++;
                end = s + m - 1;
            }
        }
        
        return answer;
    }
}

📄 정리

이 문제는 다시 칠해야 하는 모든 구역을 직접 하나씩 칠하는 것이 아니라,

한 번 칠했을 때 어디까지 커버되는지를 관리하는 문제이다.

 

section 배열이 오름차순으로 정렬되어 있기 때문에,

왼쪽부터 보면서 아직 칠해지지 않은 구역을 만날 때만 롤러를 사용하면 된다.

 

n은 벽의 전체 길이를 의미하지만, 최소 횟수를 계산하는 과정에서는 다시 칠해야 하는 구역만 확인하면 되므로 직접 사용하지 않아도 된다.

728x90

'코테(Solved.ac + Programmers)' 카테고리의 다른 글

프로그래머스 이웃한 칸 JAVA 풀이  (0) 2026.06.18
프로그래머스 실패율 JAVA 풀이 (정렬, 구현)  (0) 2026.06.17
프로그래머스 소수 만들기 JAVA 풀이 (조합, 소수 판별)  (0) 2026.06.16
프로그래머스 폰켓몬 JAVA 풀이 (HashSet, 자료구조)  (0) 2026.06.15
프로그래머스 기사단원의 무기 JAVA 풀이 (약수, 구현)  (0) 2026.06.15
'코테(Solved.ac + Programmers)' 카테고리의 다른 글
  • 프로그래머스 이웃한 칸 JAVA 풀이
  • 프로그래머스 실패율 JAVA 풀이 (정렬, 구현)
  • 프로그래머스 소수 만들기 JAVA 풀이 (조합, 소수 판별)
  • 프로그래머스 폰켓몬 JAVA 풀이 (HashSet, 자료구조)
PUSH → MERGE → DEPLOY
PUSH → MERGE → DEPLOY
데이터 흐름과 운영 자동화를 설계하는 백엔드 개발자
  • PUSH → MERGE → DEPLOY
    Coding Dongin
    PUSH → MERGE → DEPLOY
  • 전체
    오늘
    어제
    • MEUN
      • 코테(Solved.ac + Programmers)
      • BootCamp(JAVA)
      • JAVA
      • SpringBoot
      • JavaScript
      • JSP
      • DB(SQL)
      • React
      • HTML_CSS
      • jQuery
      • SCSS
      • GSAP
      • 설치 + 꿀팁
      • 정보처리기사 오답노트
      • 정보처리기사 기출문제
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • GIT
  • 공지사항

  • 인기 글

  • 태그

    정렬
    springboot
    백엔드개발자
    브루트포스
    Level2
    정처기오답노트
    자료구조
    알고리즘
    프로그래머스
    코딩테스트
    solved.ac
    완전탐색
    실기
    문자열
    배열
    정보처리기사
    구현
    정처기
    dp
    시뮬레이션
    자바
    수학
    정처기실기
    level0
    java
    level1
    백준
    피보나치
    기출문제
    정보처리기사 실기 기출문제
  • 최근 댓글

  • 최근 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.4
PUSH → MERGE → DEPLOY
프로그래머스 덧칠하기 JAVA 풀이 (그리디)
상단으로

티스토리툴바