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 |