반응형
Notice
Hot Posts
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 백준
- 코딩테스트
- 투포인터
- 운영체제
- 프로그래머스
- 등촌동속눈썹연장
- ai/bigdata
- 등촌동속눈썹펌
- 알고리즘
- level2
- BOJ
- OS
- 정렬
- 딥러닝
- 삼성 SW역량테스트 기출
- 마곡속눈썹펌
- leetcode
- 삼성SW역량테스트
- 리트코드
- 다시보기
- 삼성
- 수학
- 마곡속눈썹연장
- 포스코
- 직무면접
- 시뮬레이션
- Java
- 1차면접
- 추석트래픽
- 카카오
Archives
- Today
- Total
기록하는 습관을 들이자
[ 백준 14500 테트로미노 ] 문제 풀이(Java) - 삼성 SW역량테스트 기출 본문
반응형
어렵진 않은 문제이나 실수하기 좋은 시뮬레이션 문제입니다! 틀리면 디버깅하기도 어렵,,,,
문제보기
https://www.acmicpc.net/problem/14500
나의 풀이
테트로미노 블록을 올려놓았을 때 점수가 최대가 되는 때를 구하는 문제입니다. 그러므로 블록을 올릴 수 있는 모든 경우의 수, 가능한 모든 블록의 모양을 다 탐색해주는 브루트 포스 문제입니다.
문제에 제시된 테트로미노 모형은 5개지만 회전, 대칭이 모두 가능하므로 가능한 총 블록의 수는 19개가 됩니다!
다음과 같이 19개의 블록을 N*M 종이 위에 모두 올려보면 됩니다. 블록을 올릴 때는 그 블록의 시작점이 올 수 있는 위치를 for문의 조건으로 선정하셔야 합니다!
코드
//브루트 포스 문제
import java.io.*;
public class N_14500 {
public static void main(String[] args) {
// TODO Auto-generated method stub
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
try {
String[] arr = br.readLine().split(" ");
int N = Integer.parseInt(arr[0]);
int M = Integer.parseInt(arr[1]);
int[][] A = new int[N][M];
for (int i = 0; i < N; i++) {
String[] arr1 = br.readLine().split(" ");
for (int j = 0; j < M; j++) {
A[i][j] = Integer.parseInt(arr1[j]);
}
}
int max = Integer.MIN_VALUE;
// 1번
int sum = 0;
for (int i = 0; i < N; i++) {
for (int j = 0; j <= M - 4; j++) {
sum = A[i][j] + A[i][j + 1] + A[i][j + 2] + A[i][j + 3];
if (max < sum)
max = sum;
}
}
// 2번
for (int i = 0; i <= N - 4; i++) {
for (int j = 0; j < M; j++) {
sum = A[i][j] + A[i + 1][j] + A[i + 2][j] + A[i + 3][j];
if (max < sum)
max = sum;
}
}
// 3번
for (int i = 0; i <= N - 2; i++) {
for (int j = 0; j <= M - 2; j++) {
sum = A[i][j] + A[i + 1][j] + A[i][j + 1] + A[i + 1][j + 1];
if (max < sum)
max = sum;
}
}
// 4번
for (int i = 0; i <= N - 3; i++) {
for (int j = 0; j <= M - 2; j++) {
sum = A[i][j] + A[i + 1][j] + A[i + 2][j] + A[i + 2][j + 1];
if (max < sum)
max = sum;
}
}
// 5번
for (int i = 0; i <= N - 2; i++) {
for (int j = 2; j < M; j++) {
sum = A[i][j] + A[i][j - 1] + A[i][j - 2] + A[i + 1][j - 2];
if (max < sum)
max = sum;
}
}
// 6번
for (int i = 0; i <= N - 3; i++) {
for (int j = 0; j <= M - 2; j++) {
sum = A[i][j] + A[i][j + 1] + A[i + 1][j + 1] + A[i + 2][j + 1];
if (max < sum)
max = sum;
}
}
// 7번
for (int i = 0; i <= N - 2; i++) {
for (int j = 2; j < M; j++) {
sum = A[i][j] + A[i + 1][j] + A[i + 1][j - 1] + A[i + 1][j - 2];
if (max < sum)
max = sum;
}
}
// 8번
for (int i = 0; i <= N - 3; i++) {
for (int j = 1; j < M; j++) {
sum = A[i][j] + A[i + 1][j] + A[i + 2][j] + A[i + 2][j - 1];
if (max < sum)
max = sum;
}
}
// 9번
for (int i = 0; i <= N - 2; i++) {
for (int j = 0; j <= M - 3; j++) {
sum = A[i][j] + A[i + 1][j] + A[i + 1][j + 1] + A[i + 1][j + 2];
if (max < sum)
max = sum;
}
}
// 10번
for (int i = 0; i <= N - 3; i++) {
for (int j = 1; j < M; j++) {
sum = A[i][j] + A[i][j - 1] + A[i + 1][j - 1] + A[i + 2][j - 1];
if (max < sum)
max = sum;
}
}
// 11번
for (int i = 0; i <= N - 2; i++) {
for (int j = 0; j <= M - 3; j++) {
sum = A[i][j] + A[i][j + 1] + A[i][j + 2] + A[i + 1][j + 2];
if (max < sum)
max = sum;
}
}
// 12번
for (int i = 0; i <= N - 3; i++) {
for (int j = 0; j <= M - 2; j++) {
sum = A[i][j] + A[i + 1][j] + A[i + 1][j + 1] + A[i + 2][j + 1];
if (max < sum)
max = sum;
}
}
// 13번
for (int i = 0; i <= N - 2; i++) {
for (int j = 2; j < M; j++) {
sum = A[i][j] + A[i][j - 1] + A[i + 1][j - 1] + A[i + 1][j - 2];
if (max < sum)
max = sum;
}
}
// 14번
for (int i = 0; i <= N - 3; i++) {
for (int j = 1; j < M; j++) {
sum = A[i][j] + A[i + 1][j] + A[i + 1][j - 1] + A[i + 2][j - 1];
if (max < sum)
max = sum;
}
}
// 15번
for (int i = 0; i <= N - 2; i++) {
for (int j = 0; j <= M - 3; j++) {
sum = A[i][j] + A[i][j + 1] + A[i + 1][j + 1] + A[i + 1][j + 2];
if (max < sum)
max = sum;
}
}
// 16번
for (int i = 0; i <= N - 2; i++) {
for (int j = 0; j <= M - 3; j++) {
sum = A[i][j] + A[i][j + 1] + A[i][j + 2] + A[i + 1][j + 1];
if (max < sum)
max = sum;
}
}
// 17번
for (int i = 0; i <= N - 3; i++) {
for (int j = 1; j < M; j++) {
sum = A[i][j] + A[i + 1][j] + A[i + 1][j - 1] + A[i + 2][j];
if (max < sum)
max = sum;
}
}
// 18번
for (int i = 0; i <= N - 2; i++) {
for (int j = 1; j <= M - 2; j++) {
sum = A[i][j] + A[i + 1][j - 1] + A[i + 1][j] + A[i + 1][j + 1];
if (max < sum)
max = sum;
}
}
// 19번
for (int i = 0; i <= N - 3; i++) {
for (int j = 0; j <= M - 2; j++) {
sum = A[i][j] + A[i + 1][j] + A[i + 1][j + 1] + A[i + 2][j];
if (max < sum)
max = sum;
}
}
System.out.println(max);
} catch (IOException e) {
e.printStackTrace();
}
}
}
결과
반응형
'알고리즘 > BOJ' 카테고리의 다른 글
[ 백준 15685번 드래곤 커브 ] 문제 풀이(Java) - 삼성 SW역량테스트 기출 (0) | 2020.04.29 |
---|---|
[ 백준 15684 사다리조작 ] 문제 풀이(Java) - 삼성 SW역량테스트 기출 (0) | 2020.04.29 |
[ 백준 14999 주사위 굴리기 ] 문제 풀이(Java) - 삼성 SW역량테스트 기출 (0) | 2020.04.16 |
[ 백준 1057 토너먼트 ] 문제 풀이(Java) - 시뮬레이션 문제 (0) | 2020.04.16 |
[ 백준 13458 시험 감독 ] 문제 풀이(Java) - 삼성SW역량테스트 기출 (0) | 2020.04.08 |
Comments