문제
https://www.acmicpc.net/problem/1992
1992번: 쿼드트리
첫째 줄에는 영상의 크기를 나타내는 숫자 N 이 주어진다. N 은 언제나 2의 제곱수로 주어지며, 1 ≤ N ≤ 64의 범위를 가진다. 두 번째 줄부터는 길이 N의 문자열이 N개 들어온다. 각 문자열은 0 또
www.acmicpc.net
문제 설명
문제 풀이
https://www.acmicpc.net/problem/1780
1780번: 종이의 개수
N×N크기의 행렬로 표현되는 종이가 있다. 종이의 각 칸에는 -1, 0, 1 중 하나가 저장되어 있다. 우리는 이 행렬을 다음과 같은 규칙에 따라 적절한 크기로 자르려고 한다. 만약 종이가 모두 같은 수
www.acmicpc.net
이 문제랑 풀이 방식이 비슷했다.
재귀 호출을 통해 해결할 수 있는 문제다.
코드
import java.io.*;
import java.util.*;
class Main {
static String[] map;
static StringBuilder result = new StringBuilder();
//압축
static void zip(int row, int col, int size){
//사이즈가 1일때
if(size == 1) {
if(map[row].charAt(col) == '1')
result.append(1);
else
result.append(0);
}
else {
boolean flag = true;
char ch = map[row].charAt(col);
for(int i = row; i < row + size; i++) {
for(int j = col; j < col + size; j++){
if(ch != map[i].charAt(j)) {
flag = false;
break;
}
}
}
//압축이 가능하면
if(flag) {
result.append(ch);
}
else {
result.append("(");
zip(row, col, size / 2);
zip(row, col + size / 2, size / 2);
zip(row + size / 2, col, size / 2);
zip(row + size / 2, col + size / 2, size / 2);
result.append(")");
}
}
}
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
map = new String[N];
//입력
for(int i = 0; i < N ;i++) {
map[i] = br.readLine();
}
zip(0, 0, N);
//출력
System.out.println(result);
}
}
'🧑💻코딩 테스트 > 백준 (BOJ)' 카테고리의 다른 글
[코딩테스트/백준 알고리즘] 1074번 - Z (Java, 자바 풀이) (0) | 2023.01.18 |
---|---|
[코딩테스트/백준 알고리즘] 1389번 - 케빈 베이컨의 6단계 법칙 (0) | 2023.01.13 |
[코딩테스트/ 백준 알고리즘] 17626번 - Four Squares (Java, 자바 풀이) (0) | 2023.01.05 |
[코딩테스트/백준 알고리즘] 7576번 - 토마토 (Java, 자바 풀이) (0) | 2022.12.30 |
[코딩테스트/백준 알고리즘] 1931번 - 회의실 배정 (Java, 자바 풀이) (0) | 2022.12.29 |
댓글