[백준(Baekjoon)][자바(java)] [삼성 SW 역량 테스트 기출 문제] 14500 : 테트로미노

728x90

 

www.acmicpc.net/problem/14500

 

14500번: 테트로미노

폴리오미노란 크기가 1×1인 정사각형을 여러 개 이어서 붙인 도형이며, 다음과 같은 조건을 만족해야 한다. 정사각형은 서로 겹치면 안 된다. 도형은 모두 연결되어 있어야 한다. 정사각형의 변

www.acmicpc.net

 

문제 풀이

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

public class Main {

	public static void main(String[] args) {
    
		int t[][][] = { { {0,0},{0,1},{0,2},{0,3},{0,3} },  // tetromino
						{ {0,0},{1,0},{2,0},{3,0},{3,0} }, 
						{ {0,0},{0,1},{1,0},{1,1},{1,1} }, 
						{ {0,0},{0,1},{1,1},{1,2},{1,2} }, 
						{ {0,1},{0,2},{1,0},{1,1},{1,2} }, 
						{ {0,1},{1,0},{1,1},{2,0},{2,1} }, 
						{ {0,0},{1,0},{1,1},{2,1},{2,1} }, 
						{ {0,0},{0,1},{0,2},{1,2},{1,2} }, 
						{ {0,2},{1,0},{1,1},{1,2},{1,2} }, 
						{ {0,0},{0,1},{1,0},{2,0},{2,1} }, 
						{ {0,0},{0,1},{1,1},{2,1},{2,1} },
						{ {0,0},{0,1},{0,2},{1,0},{1,2} },
						{ {0,0},{1,0},{1,1},{1,2},{1,2} },
						{ {0,0},{1,0},{2,0},{2,1},{2,1} },
						{ {0,1},{1,1},{2,0},{2,1},{2,1} },
						{ {0,0},{0,1},{0,2},{1,1},{1,2} },
						{ {0,1},{1,0},{1,1},{1,2},{1,2} },
						{ {0,0},{1,0},{1,1},{2,0},{2,1} },
						{ {0,1},{1,0},{1,1},{2,1},{2,1} } };

		BufferedReader br = new BufferedReader( new InputStreamReader( System.in ) );
		StringTokenizer st = new StringTokenizer( br.readLine() );
		int n = Integer.parseInt(st.nextToken()), m = Integer.parseInt(st.nextToken());
		int p[][] = new int[n][m], i, j;  // paper
		for( i = 0; i < n; ++i ) {
			st = new StringTokenizer( br.readLine() );
			for( j = 0; j < m; ++j )
				p[i][j] = Integer.parseInt(st.nextToken());
		}
		br.close();
		
		int k, l, x, y, s, r = 0;  // max x/y, sum, result( max of sum )
		for( l = 0; l < 19; ++l ) {
			x = t[l][4][0];
			y = t[l][4][1];
			for( i = 0; i < n; ++i ) {
				if( x+i >= n ) 
					break;
				for( j = 0; j < m; ++j ) {
					if( y+j >= m )
						break;
					s = 0;
					for( k = 0; k < 4; ++k )
						s += p[t[l][k][0]+i][t[l][k][1]+j];
					r = r < s ? s : r;
				}
			}
		}
		
		System.out.println( r );
	}
}

*  테트로미노( 정사각형 4개를 이어 붙인 폴리오미노 )의 모든 경우의 수 => 19개

*  19 x 5 x 2 인 int t[][][] 배열 생성 ( 4개의 좌표 + { 값이 가장 큰 행, 값이 가장 큰 열 } )

*  테트로미노의 종류에 따라 루프를 돌며 n x m 크기의 종이에 대고 이동하여 합이 가장 큰 것을 구함  ( 종이의 범위를 벗어나면 break )

 

 

반응형