마트철수
[54] 코딩테스트: 쿼드압축 후 카드 세기, 두 큐 합 같게 만들기(long type) 자바 본문
코딩테스트 준비 54일차
오늘 풀 문제는 쿼드압축 후 카드 세기, 두 큐 합 같게 만들기이다.
저번주에 풀었던 문제인데,
그때 올리지 않아서 뒤늦게 업로드한다.
아래 자세히 작성해두었다.
long type 사용 이유도!
쿼드압축 후 카드 세기
- 부터~ N/2만큼 돌면서 숫자가 같은지 확인해줄 boolean 함수
- 끝까지 확인하기 위한 is 함수


프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
최종 코드
import java.util.*;
class Solution {
int[] answer;
public int[] solution(int[][] arr) {
answer = new int[2];
int N = arr.length;
dfs(N, arr, 0, 0);
return answer;
}
private void dfs(int N, int[][] arr, int a, int b){
if(is(N, arr, a, b)){
answer[arr[a][b]]++;
return;
}
dfs(N/2, arr, a, b);
dfs(N/2, arr, a+N/2, b);
dfs(N/2, arr, a, b+N/2);
dfs(N/2, arr, a+N/2, b+N/2);
}
private static boolean is(int N, int[][] arr, int a, int b){
for(int i=a; i<a+N; i++){
for(int j=b; j<b+N; j++){
if(arr[i][j] != arr[a][b]){
return false;
}
}
}
return true;
}
}
▼ 아래 쿼터트리 위키백과 내용도 참고해보긔 ▼
https://en.wikipedia.org/wiki/Quadtree
Quadtree - Wikipedia
From Wikipedia, the free encyclopedia Tree data structure in which each internal node has exactly four children, to partition a 2D area A point-region quadtree with point data. Bucket capacity 1. Quadtree compression of an image step by step. Left shows th
en.wikipedia.org
두 큐 합 같게 만들기
- ArrayDeque 생성 후 queue.poll()
- while조건
- count <= max && !q1.isEmpty() && !q2.isEmpty()


프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
최종 코드
import java.util.*;
class Solution {
int count;
public int solution(int[] queue1, int[] queue2) {
Queue<Integer> q1 = new LinkedList<>();
Queue<Integer> q2 = new LinkedList<>();
//long 왜?
long sum1 = 0;
long sum2 = 0;
for(int i : queue1){
q1.add(i);
sum1 += i;
}
for(int i : queue2){
q2.add(i);
sum2 += i;
}
//이것의 중간값을 찾아라
long t = sum1+sum2;
long t1 = t/2;
while(count <= max && !q1.isEmpty() && !q2.isEmpty()){
if(sum1 == sum2){
break;
}else if(sum1 < t1){
int cur = q2.poll();
sum1 += cur;
sum2 -= cur;
q1.add(cur);
}else{
int cur = q1.poll();
sum1 -= cur;
sum2 += cur;
q2.add(cur);
}
count++;
}
if(sum1 != sum2){
return -1;
}else{
return count;
}
}
}
언제 long type을 고려해야할까?

현재 원소는 1~10의 9승이다.
그래서 더해서 값을 비교하기 때문에 int의 값을 넘어설 수 있다.
int는 20억(10의 9승까지?)
그래서 sum(s1, s2)만 long으로 선언해주면 오류 해결!

그리고 q.poll()하면 가장 먼저 들어간 값이 나온다!
'개인공부 > 알고리즘' 카테고리의 다른 글
| [56] 코딩테스트: 삼각달팽이, 마법의 엘레베이터 (0) | 2025.01.28 |
|---|---|
| [55] 코딩테스트: 소수 찾기, 다리를 지나는 트럭 자바 풀이 (1) | 2025.01.27 |
| [53] 코딩테스트: 2개 이하로 다른 비트, 가장 큰 수 자바 (0) | 2025.01.21 |
| [52] 코딩테스트: 2xn 파일링, 프렌즈4블록(카카오인턴문제) 자바 (2) | 2025.01.20 |
| [51] 코딩테스트: 파일명 정렬 자바 풀이 (0) | 2025.01.17 |