✔ 덧칠하기
문제 분석하기
다시 페인트를 칠하기로 정한 구역을 하나씩 돌면서 함께 칠해질 경우 지나가며 페인트칠해야 하는 최소 횟수를 증가시킴
손으로 풀어보기
- 페인트를 칠하기로 정한 구역 하나씩 돌기
- 이때 페인트를 칠할 때 같이 칠해질 수 있다면 구역에서 지나감
- 최소 횟수 증가
- 최소 횟수 출력
슈도코드 작성하기
n(페인트가 칠해질 수 있는 구역 갯수)
m(롤러의 길이)
section(다시 페인트를 칠하기로 정한 구역들의 번호)
start(롤러 시작 위치)
answer(최소 횟수)
for(section의 길이만큼) {
if(star + m가 더 크다면)
continue
start 갱신
answer 증가
}
answer 리턴
코드 구현하기
/**
* 161989) 덧칠하기
*/
public class L073_161989 {
// n(페인트가 칠해질 수 있는 구역 갯수)
// m(롤러의 길이)
// section(다시 페인트를 칠하기로 정한 구역들의 번호)
public int solution(int n, int m, int[] section) {
// start(롤러 시작 위치)
int start = section[0];
// answer(최소 횟수)
int answer = 1;
for (int sec : section) {
// 페인트를 칠할 때 같이 칠해질 수 있다면 넘어감
if (start + m > sec)
continue;
// start 갱신
start = sec;
// answer 증가
answer++;
}
// answer 리턴
return answer;
}
// 테스트 케이스
public static void main(String[] args) {
L073_161989 solution = new L073_161989();
int n = 8;
int m = 4;
int[] section = { 2, 3, 6 };
int result = solution.solution(n, m, section);
System.out.println(result);
}
}
'Coding Test > Java 알고리즘 실전' 카테고리의 다른 글
[159994] 카드 뭉치 (0) | 2023.10.22 |
---|---|
[160586] 대충 만든 자판 (0) | 2023.10.21 |
[161990] 바탕화면 정리 (0) | 2023.10.19 |
[172928] 공원 산책 (0) | 2023.10.18 |
[176963] 추억 점수 (0) | 2023.10.17 |