광규니
광규니네
광규니
전체 방문자
오늘
어제
  • 분류 전체보기 (154)
    • 알고리즘 (100)
      • 알고리즘 개념 (2)
      • 문제 풀이 (96)
    • 주절주절 (19)
      • 자격증, 활동 후기 (4)
      • 전시회 후기 (3)
      • 이모저모 (2)
      • 회고 (3)
      • 뜨럼 (7)
    • 운영체제 (9)
    • 개발 지식 (9)
      • Apple Watch (4)
      • MySQL (2)
      • Eclipse (1)
      • XCode (1)
    • 네트워크 공부 (1)
    • 데이터베이스 공부 (5)
    • Java 공부 (7)
    • TMP (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 자바
  • 백준
  • BFS
  • 알고리즘
  • 합주
  • 티스토리챌린지
  • 파이썬
  • 오블완
  • OS
  • 다이나믹 프로그래밍
  • 구현
  • 드린이
  • 컴퓨터 사이언스
  • BOJ
  • 애플워치 앱 만들기
  • 애플워치 앱
  • 프로그래머스
  • 개념
  • 운영체제
  • DP

최근 댓글

최근 글

티스토리

250x250
hELLO · Designed By 정상우.
광규니

광규니네

알고리즘/문제 풀이

[JAVA/자바 1992 백준] 쿼드트리

2021. 8. 18. 16:14
반응형

https://www.acmicpc.net/problem/1992

 

 

1992번: 쿼드트리

첫째 줄에는 영상의 크기를 나타내는 숫자 N 이 주어진다. N 은 언제나 2의 제곱수로 주어지며, 1 ≤ N ≤ 64의 범위를 가진다. 두 번째 줄부터는 길이 N의 문자열이 N개 들어온다. 각 문자열은 0 또

www.acmicpc.net

풀이

find 부분이 중요합니다.

다른분들은 파라미터 3개로 쓴 사람도 있는데,

풀다가 헷갈려서 5개로 나눠서 썼습니다.

분할정복 문제이므로, 

label을 처음 사용해서 해결 가능한 문제인지 판단하고, 할수없으면 break 한뒤 1,2,3,4분면으로 나눠서 재귀적으로 돌립니다.

가능하다면 flag 불린값을 바꿔주고, stat~end까지 출력해줍니다.

import java.awt.Label;
import java.io.*;
import java.util.*;
public class Main {

	static int[][] map;
	static StringBuilder sb=new StringBuilder();
	
	public static void main(String[] args)throws Exception {
		// TODO Auto-generated method stub
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int n=Integer.parseInt(br.readLine());
		//map 크기 선언
		map=new int[n][n];
		// 값 넣어주기
		for(int i=0;i<n;i++) {
			String tmp=br.readLine();
			for(int j=0;j<n;j++) {
				map[i][j]=tmp.charAt(j)-'0';
			}
		}
		// size,x_start,x_end,y_start,y_end
		find(n,0,n,0,n);
		System.out.println(sb);
	}
	// size를 줄여가면서 조건 맞춰주기.
	static void find(int size,int x_start,int x_end,int y_start,int y_end) {

		boolean flag=true;
		int tmp=map[x_start][y_start];
		label :for(int i=x_start;i<x_end;i++) {
			for(int j=y_start;j<y_end;j++) {
				if(map[i][j]!=tmp) {
					flag=false;
					break label;
				}
			}
		}
		if(flag==true) {
			sb.append(map[x_start][y_start]);
			return;
		}
		else {
			//1사분면
			sb.append('(');
			find(size/2,x_start,x_start+size/2,y_start,y_start+size/2);
			//2사분면
			find(size/2,x_start,x_start+size/2,y_start+size/2,y_end);
			//3사분면
			find(size/2,x_start+size/2,x_end,y_start,y_start+size/2);
			//4사분면
			find(size/2,x_start+size/2,x_end,y_start+size/2,y_end);
			sb.append(')');
		}
	}

}

x,y의 start,end값이 헷갈린 문제..

비슷한 문제 추천해드릴게용

https://www.acmicpc.net/problem/1074

 

1074번: Z

한수는 크기가 2N × 2N인 2차원 배열을 Z모양으로 탐색하려고 한다. 예를 들어, 2×2배열을 왼쪽 위칸, 오른쪽 위칸, 왼쪽 아래칸, 오른쪽 아래칸 순서대로 방문하면 Z모양이다. 만약, N > 1이 라서

www.acmicpc.net

 

반응형
저작자표시 (새창열림)

'알고리즘 > 문제 풀이' 카테고리의 다른 글

[JAVA/자바 10026 백준] 적록색약  (2) 2021.08.25
[Java SWEA 1247] 최적 경로  (0) 2021.08.19
[JAVA SWEA 1210 ] Ladder1  (0) 2021.08.04
[Python/파이썬 프로그래머스] 다트게임(카카오)  (0) 2021.06.30
[Python/파이썬 프로그래머스] 실패율  (0) 2021.06.29
    '알고리즘/문제 풀이' 카테고리의 다른 글
    • [JAVA/자바 10026 백준] 적록색약
    • [Java SWEA 1247] 최적 경로
    • [JAVA SWEA 1210 ] Ladder1
    • [Python/파이썬 프로그래머스] 다트게임(카카오)
    광규니
    광규니
    공부 및 일상 올리기~

    티스토리툴바