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

2024. 8. 30. 05:02·SOLVED.
반응형

 

문제 링크

 

프로그래머스

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

programmers.co.kr

 


문제 해석


문제는 벽에 페인트를 다시 칠해야 하는 구역들이 주어졌을 때, 최소한의 횟수로 페인트칠을 하는 방법을 찾는 것이다.

벽의 길이는 `n` 미터이며, 각 구역은 1미터씩 나누어져 있고, 롤러의 길이는 `m` 미터이다.

페인트칠을 할 수 있는 최소 횟수를 구해야 한다.

 



접근 방법

1. 페인트칠이 필요한 구역 파악하기:
주어진 `section` 배열은 페인트칠이 필요한 구역의 번호를 담고 있다. 이 배열의 각 요소는 구역 번호를 나타낸다.
  
2. 롤러의 범위 확인:

롤러는 한 번에 연속된 `m`미터를 칠할 수 있으므로, 한 번의 칠로 여러 구역을 덮을 수 있다. 목표는 최소한의 칠로 `section` 배열의 모든 구역을 덮는 것이다.
  
3. 탐색 및 칠하기:

벽의 1번 구역부터 시작해 페인트칠이 필요한 구역을 발견하면, 롤러를 이용해 해당 구역부터 `m`미터 범위를 칠한다. 그 후, `section` 배열에서 칠해진 구역들을 제거한다.

4. 페인트칠 횟수 증가:

새로운 칠이 시작될 때마다 페인트칠 횟수를 증가시키고, 모든 필요한 구역이 칠해질 때까지 이를 반복한다.

 

 

코드 설명

function solution(n, m, section) {    
    let paint = 0; 
    
    for (let i=1; i<=n; i++) {
        if (section[0] === i) {
            paint++; 
            section.splice(0,1); 
            for (let j=i+1; j<i+m; j++) {
                if (section[0] === j) section.splice(0,1);
            }
        }
    }
    
    return paint; 
}

 


결론

이 문제는 효율적으로 구역을 덮는 방법을 찾는 탐욕 알고리즘의 한 예로 볼 수 있다.

나는 페인트칠 횟수를 최소화하기 위해 롤러의 길이를 고려해 페인트칠을 할 수 있는 최대 범위를 탐색하며 문제를 해결하였다.

반응형

'SOLVED.' 카테고리의 다른 글

[프로그래머스 Level 2] 방문 길이 (JS)  (2) 2024.11.06
[프로그래머스 Level 3] 입국심사 (JS)  (0) 2024.11.05
[프로그래머스] 추억 점수 (JS)  (2) 2024.06.13
[프로그래머스] 공원 산책 (JS)  (2) 2024.06.11
[BOJ/백준] 10773번 제로 (c++)  (2) 2024.03.01
'SOLVED.' 카테고리의 다른 글
  • [프로그래머스 Level 2] 방문 길이 (JS)
  • [프로그래머스 Level 3] 입국심사 (JS)
  • [프로그래머스] 추억 점수 (JS)
  • [프로그래머스] 공원 산책 (JS)
healim01
healim01
    반응형
  • healim01
    Hailey Daily
    healim01
  • 전체
    오늘
    어제
  • 블로그 메뉴

    • 전체
    • 우테코
    • React
    • JavaScript
    • SOLVED.
    • 개발자의 성장 도파민 기록
    • 개발자의 워크스페이스
    • Every Year Every Month
    • 글쓰기
  • 링크

    • Github
  • 인기 글

  • hELLO· Designed By정상우.v4.10.2
healim01
[프로그래머스] 덧칠하기 (JS)
상단으로

티스토리툴바