You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
예시1) 2x2 영역
1 1
1 1
-> "(1)" (모두 1이므로 하나로 압축)
예시2) 2x2 영역
1 0
1 1
-> "(1011)" (섞여있어서 압축 불가)
Step 2: 접근 방법
직관적으로 생각하기
현재 영역이 모두 같은 숫자인지 확인
다른 숫자가 있다면 1/4로나누어 재귀적으로 처리
4개의 결과를 괄호로 묶어 반환
알고리즘 표 작성
현재 영역(li,lj,ri,rj) 확인
↓
모든 값이 같은지 체크
↓
같다 -> 해당 값을 문자열로 반환
↓
다르다 -> 영역을 4등분
↓
각 부분을 재귀적으로 처리
↓
4개의 결과를 괄호로 묶어 반환
Step 3: 코드 설계
입력값 처리
N과 2차원 배열 입력받기
재귀 함수 구현
파라미터: 현재 영역의 좌표(li, lj, ri, rj)
종료조건:
모든 값이 같을 때
영역 크기가 1x1일 때
재귀단계:
영역을 4등분
각 부분을 재귀호출
결과를 괄호로 묶어 반환
Step 4: 코드 구현
constfs=require('fs');constfilePath=process.platform==='linux' ? '/dev/stdin' : './input.txt';constinput=fs.readFileSync(filePath).toString().trim().split('\n');constn=Number(input[0])constarr=[]for(leti=1;i<=n;i++){arr.push(input[i].split('').map(Number))}functionfn(li,lj,ri,rj){// 현재 영역의 첫 번째 값을 기준으로 검사constfirstValue=arr[li][lj]letisConsistent=true// 모든 값이 같은지 확인for(leti=li;i<ri;i++){for(letj=lj;j<rj;j++){if(firstValue!==arr[i][j]){isConsistent=falsebreak}}if(!isConsistent)break}// 종료조건1: 모든 값이 같으면 압축if(isConsistent)returnString(firstValue)// 종료조건2: 1x1 영역이면 그대로 반환if(ri-li===1)returnString(firstValue)// 영역을 4등분하여 재귀호출constmi=Math.floor((li+ri)/2)constmj=Math.floor((lj+rj)/2)constrec1=fn(li,lj,mi,mj)// 왼쪽 위constrec2=fn(li,mj,mi,rj)// 오른쪽 위constrec3=fn(mi,lj,ri,mj)// 왼쪽 아래constrec4=fn(mi,mj,ri,rj)// 오른쪽 아래return`(${rec1}${rec2}${rec3}${rec4})`}constres=fn(0,0,n,n)console.log(res)
The text was updated successfully, but these errors were encountered:
쿼드트리 압축
N×N 크기의 흑백 영상(2차원 배열)을 쿼드트리 방식으로 압축
📝 제약조건
💡 예시
((1111)((1111)0000))
문제 해결 과정
Step 1: 문제 이해하기
Step 2: 접근 방법
직관적으로 생각하기
알고리즘 표 작성
Step 3: 코드 설계
Step 4: 코드 구현
The text was updated successfully, but these errors were encountered: