-
[프로그래머스] 덧칠하기 자바코딩테스트 2025. 3. 29. 23:54반응형
https://school.programmers.co.kr/learn/courses/30/lessons/161989
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문제
길이가 n인 벽을 n개로 나누었을 때, 새로 칠해야 하는 구획 int[] section 을 길이가 m인 롤러로 모두 색칠하는데 필요한 최소횟수를 구하라.
접근
마지막 section인 lastIdx - 처음 section인 firstIdx < m 이면 1을 반환하고
그 외의 경우 firstIdx부터 n 까지 m 씩 이동하여 answer ++ 시도.
그러나 단순히 firstIdx += m 씩 칠하는 결과였으므로 문제에서 원하는 방식이 아니었다.
수정
section을 순회하며 현재까지 칠한 마지막 section 위치를 lastPaintedIdx에 기록하여,
다음 위치 > lastPaintedIdx일 경우 answer ++ 하여 해결하였다.
단편적인 테스트 케이스 뿐 아니라 다양한 상황에서도 정상 동작할 수 있는 로직을 생각해내는 연습이 좀 더 필요해 보인다.
코드
public static int solution(int n, int m, int[] section) { // int firstIdx = section[0]; // int lastIdx = section[section.length -1]; // // int needPaintLen = lastIdx - firstIdx +1; // int answer = 0; // // if(needPaintLen < m){ // answer = 1; // } else { // for(int i = firstIdx; i <= n; i += m){ // if( i + m <= n || n - m <= i){ // answer ++; // } // } // } int answer = 0; int lastPaintedIdx = 0; for (int j : section) { if (j > lastPaintedIdx) { answer++; lastPaintedIdx = j + m - 1; } } return answer; }
반응형'코딩테스트' 카테고리의 다른 글
[프로그래머스] 카드 뭉치 자바 (0) 2025.03.30 [프로그래머스] 대충 만든 자판 자바 (0) 2025.03.30 [프로그래머스] 바탕화면 정리 자바 (0) 2025.03.29 [프로그래머스]공원 산책 자바 (0) 2025.03.29 [프로그래머스] 연습문제 달리기 경주 자바 (0) 2025.03.28