2630 색종이 만들기

2020. 2. 25. 14:08프로그래밍 대회

나:

x,y 를 따로 다른 값을 증가 시켜줬는데, (코드가 더러워지고, 오래걸린다.)

 

다른 코드:

정사각형이라, length/2 로 잘라진 정사각형의 크기 만큼 증가 시켜주면 된다. 

1,2,3,4 블록을 나누는 패턴이 일정하다면 

len으로 함축해서 쓸수 있다. 

 

수정한 코드!


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
	static char [][]paper;
	static int cntB;// cntB (one)
	static int cntW;// cntW (zero) 
	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st;
		int N= Integer.parseInt(bf.readLine());
		paper=new char[N+1][N+1];
		for (int i = 1; i <= N; i++) {
			st =new StringTokenizer(bf.readLine()," ");
			for (int j = 1; j <= N; j++) {
				paper[i][j]= st.nextToken().charAt(0);
			}
		}
	
		dfs(1,1,N);	// 재귀 dfs (범위 시작점, 끝점 )
	
		System.out.println(cntW);
		System.out.println(cntB);
		// 카운트
		
		
	}
	
	private static void dfs(int x,int y, int length) { // length/2
		char temp= paper[x][y];
		int  i;
		for (i = x; i < x+length; i++) {
			for (int j = y; j < y+length; j++) {// temp 보단 큼 
				if(temp!=paper[i][j]) { // 다른 색깔 존재 
					int len=length/2;
					dfs(x,y,len);
					dfs(x+len ,y,len); 
					dfs(x ,y+len,len); 
					dfs(x+len ,y+len,len); 
					return; // 뒤섞인 건 카운트 할필요 x 
				}
			}
		}
		if(i==x+length) { //다 돌았는데 다른게 없다. 
			if(temp=='1') { // 1 박스면 B 증가
				cntB++;
			}else {// 0 박스면 W 증가
				cntW++;
			}
		}
		
	
	}

}

'프로그래밍 대회' 카테고리의 다른 글

백준 괄호 9093 java  (0) 2022.03.17
1757 달려달려 (java)  (0) 2020.08.05
SWEA 모의역량테스트 탈주범 검거  (0) 2020.06.02
백준 2636 치즈  (0) 2020.05.15
2178 미로탐색  (0) 2020.02.25