https://school.programmers.co.kr/learn/courses/30/lessons/161989
문제 접근
색칠해야 될 부분을 일일이 찾지 않아도 간단하게 문제를 풀 수 있을 거 같은 느낌이었는데 찾아가는 과정에서 정답 60점에서 막혀서 갈아엎고 그냥 다시 풀었다.
n 크기의 boolean 배열 생성 후 색칠해야될 구역은 true로 표시
반복문 돌면서 true를 발견하면 해당 인덱스부터 + m 만큼 색칠해준다.
이 색칠한 횟수를 카운팅 후 return
class Solution {
public int solution(int n, int m, int[] section) {
int answer = 0;
boolean[] wallLength = new boolean[n+1]; // 0 ~ n;
for(int i=0; i<section.length; i++) wallLength[section[i]] = true;
for(int i=1; i<wallLength.length; i++) {
if(wallLength[i] == true) {
if(i+m > wallLength.length) {
for(int j=i; j<wallLength.length; j++) wallLength[j] = false;
}
else for(int j=i; j<i+m; j++) wallLength[j] = false;
answer++;
}
}
return answer;
}
}
다른 사람 풀이
현재 칠할 곳이 이전에 칠했던 범위에 포함되어있는지 확인하는 코드가 인상적
class Solution {
public int solution(int n, int m, int[] section) {
int roller = section[0]; // 색칠 시작 지점
int cnt = 1; // 무조건 한 번은 칠한다
for(int i = 1; i < section.length; i++) {
// 지금 칠할 곳이 이전에 칠했던 범위에 포함되어 있는지 판별
if(roller + m - 1 < section[i]) { // 시작 지점도 칠해야 되서 roller + m에 - 1해줌
cnt++;
roller = section[i];
}
}
return cnt;
}
}
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 / 추억 점수 / JAVA] (0) | 2023.03.31 |
---|---|
[프로그래머스 / 공원 산책 / JAVA] (0) | 2023.03.27 |
[프로그래머스 / 폰켓몬 / JAVA / 해시] (0) | 2023.03.23 |
[프로그래머스 / 2016년 / JAVA] (0) | 2023.03.23 |
[프로그래머스 / 문자열 내 마음대로 정렬하기 / JAVA] (0) | 2023.03.22 |
댓글