728x90
개요
프로그래머스 "덧칠하기" 문제는 n미터인 벽이 있고, 벽에 페인트를 칠하는 m길이의 롤러와 페인트칠을 해야할 배열 section이 주어집니다.
주어진 입력값을 사용하여 최소한의 페인트 덧칠 횟수를 구하는 문제입니다.
위 그림을 예시로 들어보면 벽 n = 8, 롤러 m = 4, section = [2, 3, 6]이라는 입력값을 사용하여 최소한의 페인트 덧칠을 해야합니다.
- 롤러가 벽에서 벗어나면 안 됩니다.
- 구역의 일부분만 포함되도록 칠하면 안 됩니다.
또한 위와 같은 조건이 있기 떄문에 페인트칠 할 때는 반드시 section에 있는 모든 구역을 포함하도록 롤러를 사용해야 하고, 롤러가 벽을 넘어서도 안 됩니다.
- [2, 3, 4, 5] 그리고 [3, 4, 5, 6]
- [3, 4, 5, 6] 그리고 [1, 2, 3, 4]
- [2, 3, 4, 5] 그리고 [5, 6, 7, 8]
- [1, 2, 3, 4] 그리고 [5, 6, 7, 8]
최소횟수 2번인 해결책은 위와 같습니다.
나의 풀이
import java.util.Arrays;
public class Solution {
public int solution(int n, int m, int[] section) {
int cnt = 0;
int wall[] = new int[n];
Arrays.fill(wall,1);
for(int i : section){
wall[i-1] = 0;
}
int idx = 0;
while (idx < n){
if(wall[idx] == 0){
cnt++;
idx+=m;
}else {
idx++;
}
}
return cnt;
}
public static void main(String[] args) {
Solution sol = new Solution();
int n = 8;
int m = 4;
int[] section = {2,3,6};
System.out.println(sol.solution(n,m,section));
}
}
저의 풀이는 위와 같으며, 페인트를 칠할 벽을 Arrays.fill()메서드로 간편하게 채우고, 향상된 for문을 사용하여 페인트 덧칠할 부분을 0으로 채워줬습니다.
그 후 인덱스를 만들어, 인덱스가 벽의 끝까지 도달할 때까지 while문을 실행하였고, 벽의 요소가 0(즉, 덧칠해야 할 부분)인 경우에만 횟수 cnt를 증가시키고 롤러의 길이만큼 벽을 이동하도록 했습니다.
Arrays.fill() 메서드란❓
Arrays.fill() 메서드는 Java의 Arrays 클래스에 포함된 유틸리티 메서드로, 배열의 모든 요소를 지정된 값으로 초기화하는 데 사용됩니다. 이 메서드는 배열을 한 번에 손쉽게 채울 수 있게 해줍니다.
전체 배열 채우기
int[] array = new int[5];
Arrays.fill(array, 10);
// array는 이제 [10, 10, 10, 10, 10]이 됩니다.
부분 배열 채우기
int[] array = new int[5];
Arrays.fill(array, 1, 4, 20);
// array는 이제 [0, 20, 20, 20, 0]이 됩니다. (인덱스 1부터 3까지 20으로 채워짐)
2차원 배열 채우기
int[][] matrix = new int[3][3];
for (int[] row : matrix) {
Arrays.fill(row, 5);
}
// matrix는 이제 [[5, 5, 5], [5, 5, 5], [5, 5, 5]]가 됩니다.
'TIL,일일 회고' 카테고리의 다른 글
[TIL, 일일 회고] 2024.09.27 - Git: 'fatal: couldn't find remote ref' 오류 해결하기 (0) | 2024.09.27 |
---|---|
[TIL, 일일 회고] 2024.09.26 - 제곱근을 이용한 효율적인 약수 계산 방법 (0) | 2024.09.26 |
[TIL, 일일 회고] 2024.09.24 - 나머지 연산(%)을 활용한 배열 순환 처리 방법 (1) | 2024.09.24 |
[TIL, 일일 회고] 2024.09.23 - Feign Client에서 PATCH 메서드 사용 시 발생하는 문제와 해결 방법 (0) | 2024.09.23 |
[TIL, 일일 회고] 2024.09.22 - 대용량 데이터 에러 해결 트러블 슈팅 (0) | 2024.09.22 |