반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 코엑스
- 용인맛집
- 개발
- 맛집
- java
- 프로그래머스
- bigdata engineer
- 여행
- 자바
- BigData
- Trino
- 코딩
- 백준
- 영어
- 코딩테스트
- apache iceberg
- Apache Kafka
- Data Engineer
- Spark
- bigdata engineering
- 삼성역맛집
- Kafka
- 코엑스맛집
- 코테
- HIVE
- Iceberg
- 알고리즘
- pyspark
- Data Engineering
- hadoop
Archives
- Today
- Total
지구정복
[분할정복] 백준 - 색종이 만들기 본문
728x90
반응형
https://www.acmicpc.net/problem/2630
2630번: 색종이 만들기
첫째 줄에는 전체 종이의 한 변의 길이 N이 주어져 있다. N은 2, 4, 8, 16, 32, 64, 128 중 하나이다. 색종이의 각 가로줄의 정사각형칸들의 색이 윗줄부터 차례로 둘째 줄부터 마지막 줄까지 주어진다.
www.acmicpc.net
-문제해설
풀다가 어려워서 이 분의 코드를 참고했다.
https://st-lab.tistory.com/227
먼저 문제와 나와있는 대로 정사각형에 모든 값이 1이 아니거나 0이 아니면 현재 정사각형을 2등분해서 각 사분면에 대해서 다시 전체 값이 1인지 0인지를 검사한다. 이때 전체값이 1이거나 0이면 재귀함수를 빠져나오고 아닐 경우 재귀함수를 계속 호출한다.
아직 분할정복에 대해서 공부가 더 필요함을 느꼈다...!
-자바
package bfs_dfs;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class BJ2630 {
private static int white = 0;
private static int blue = 0;
private static int[][] arr;
private static boolean colChk( int row, int col, int size ) {
int color = arr[row][col];
for( int i=row; i<row+size; i++ ) {
for( int j=col; j<col+size; j++ ) {
if( arr[i][j] != color ) return false;
}
}
return true;
}
private static void cutPaper( int row, int col, int size ) {
if( colChk( row, col, size ) ) {
if( arr[row][col] == 0 ) white++;
else blue++;
return;
}
int newSize = size / 2;
cutPaper(row, col, newSize);
cutPaper(row, col+newSize, newSize);
cutPaper(row+newSize, col, newSize);
cutPaper(row+newSize, col+newSize, newSize);
}
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt( br.readLine() );
StringTokenizer st;
arr = new int[n][n];
for( int i=0; i<n; i++ ) {
st = new StringTokenizer( br.readLine() );
for( int j=0; j<n; j++ ) arr[i][j] = Integer.parseInt( st.nextToken() );
}
cutPaper(0, 0, n);
System.out.println( white );
System.out.println( blue );
}
}
-파이썬
728x90
반응형
'데이터 엔지니어링 정복 > Algorithm' 카테고리의 다른 글
[DP] 백준 - 파도반 수열 (0) | 2021.08.13 |
---|---|
[자료구조,수학] 백준 - 패션왕 신해빈 (0) | 2021.08.11 |
[정렬] 백준 - 좌표압축 (0) | 2021.08.08 |
[DP] 백준 - 피보나치 함수 (0) | 2021.08.05 |
[자료구조] 백준 - 비밀번호 찾기 (0) | 2021.08.05 |
Comments