꾸물꾸물 졔의 개발공부
[프로그래머스] 쿼드압축 후 개수 세기 - JAVA (월간 코드 챌린지 시즌1) 본문
https://school.programmers.co.kr/learn/courses/30/lessons/68936
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
한 변의 길이가 2^n 인 정사각형으로 주어지기 때문에, 정사각형 영역을 4등분 해가며 재귀 구현
- 재귀함수의 매개변수 : arr배열, 시작위치 (x,y), 영역 한변의 길이
- 영역 안의 모든 값이 같은지 확인 후, 모두 같은 값이라면 answer[값] ++ 후 재귀 종료
- 하나라도 다른 값이 있다면 4등분 하여 재귀
class Solution {
static int[] answer;
private boolean isSame(int[][] arr, int x, int y, int len, int val){
for(int i=x; i<x+len; i++){
for(int j=y; j<y+len; j++){
if(arr[i][j] != val) return false;
}
}
return true;
}
private void quad(int[][] arr, int x, int y, int len){
//만약에 영역 안의 수가 모두다 같으면,
if(isSame(arr, x, y, len, arr[x][y])){
answer[arr[x][y]]++;
return;
}
len/=2;
quad(arr, x, y, len);
quad(arr, x+len, y, len);
quad(arr, x, y+len, len);
quad(arr, x+len, y+len, len);
}
public int[] solution(int[][] arr) {
answer = new int[2];
//매개변수 : 시작(x,y), 한변의 길이
quad(arr, 0,0, arr.length);
return answer;
}
}
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 이진 변환 반복하기 - JAVA (월간 코드 챌린지 시즌 1 (0) | 2023.09.06 |
---|---|
[프로그래머스] 이모티콘 할인행사 - JAVA (2023 KAKAO BLIND RECRUITMENT) (0) | 2023.09.04 |
[프로그래머스] 개인정보 수집 유효기간 - JAVA (2023 KAKAO BLIND RECRUITMENT) (0) | 2023.09.01 |
[프로그래머스] 등산코스 정하기 - JAVA (2022 KAKAO TECH INTERNSHIP) (0) | 2023.08.22 |
[프로그래머스] 다단계 칫솔 판매 - JAVA (2021 Dev-Matching: 웹 백엔드 개발자(상반기)) (0) | 2023.06.27 |