-
[Java] 백준 1780 종이의 개수Programming/Algorithm 2021. 3. 5. 19:53
문제
잘라진 종이가 한 숫자로만 이루어져 있는지를 검사하고
그렇다면 종이 개수를 추가하고, 아니라면 9등분으로 나눠 다시 종이 내의 숫자를 검사하는 문제이다.
9등분으로 나누는 부분을 재귀로 처리하였다.
풀이
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Main { static int N; static int[][] map; static int[] res; public static void main(String[] args) throws IOException { solution(); } static void solution() throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); N = Integer.parseInt(br.readLine()); map = new int[N][N]; for (int i = 0; i < N; i++) { StringTokenizer st = new StringTokenizer(br.readLine()); for (int j = 0; j < N; j++) { map[i][j] = Integer.parseInt(st.nextToken()); } } res = new int[3]; recursion(0, 0, N); StringBuilder sb = new StringBuilder(); for (int i = 0; i < 3; i++) { sb.append(res[i]).append("\n"); } System.out.println(sb); } static void recursion(int x, int y, int len) { boolean isSame = true; int number = map[x][y]; loop: for (int i = x; i < x + len; i++) { for (int j = y; j < y + len; j++) { if (map[i][j] != number) { isSame = false; break loop; } } } if (isSame) { res[number + 1]++; return; } int nlen = len / 3; for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { recursion(x + i * nlen, y + j * nlen, nlen); } } } }
피드백
- 정사각형 형태이고 9등분으로 나누면 너비와 높이 모두 같은 비율로 줄어들기 때문에, nx와 ny를 굳이 나눠서 계산할 필요 없다. nlen = len/3으로 모두 처리 가능
채점결과
'Programming > Algorithm' 카테고리의 다른 글
[Java] 백준 1992 쿼드트리 (0) 2021.03.09 [Java] 백준 11729 하노이 탑 이동 순서 (0) 2021.03.05 [Java] 백준 11728 배열 합치기 (0) 2021.03.05 [Java] 프로그래머스 징검다리 (0) 2021.03.05 [Java] 프로그래머스 입국심사 (0) 2021.03.05 댓글