삐까냥의 파도타기
14500번) 테트로미노 본문
문제 출처 : https://www.acmicpc.net/problem/14500
이거는 그냥 노가다 문제같아요.
누가 잘 참고 풀수 있느냐.
그룹지어서 계산했습니다.
그룹 목록 (세로 * 가로)
그룹 1 : 1*4
그룹 2 : 4*1
그룹 3 : 2*2
그룹 4 : 3*2
그룹 5 : 2*3
2018년 4월 8일 - 다듬지 않은 코드 (소요시간 44분) package samsung; import java.util.Scanner; public class Q14500 { static int[][] map; static int mapY, mapX; static long result = 0; public static void main(String[] args) { Scanner sc = new Scanner(System.in); mapY = sc.nextInt(); mapX = sc.nextInt(); map = new int[mapY][mapX];
for (int i = 0; i < mapY; i++) { for (int j = 0; j < mapX; j++) { map[i][j] = sc.nextInt(); } }
//search 1 for (int i = 0; i < mapY; i++) { for (int j = 0; j < mapX; j++) { model1(i, j); model2(i, j); model3(i, j); model4(i, j); model5(i, j); } } System.out.println(result); }
static void model1(int y, int x) { if (x+3 < mapX) { int tempResult = 0; for (int i = x; i <= x+3; i++) { tempResult += map[y][i]; } setResult(tempResult); } }
static void model2(int y, int x) { if (y+3 < mapY) { int tempResult = 0; for (int i = y; i <= y+3; i++) { tempResult += map[i][x]; } setResult(tempResult); } }
static void model3(int y, int x) { if (y+1 < mapY && x+1 < mapX) { int tempResult = 0; for (int i = y; i <= y+1; i++) { for (int j = x; j <= x+1; j++) { tempResult += map[i][j]; } } setResult(tempResult); } }
static void model4(int y, int x) { if (y+2 < mapY && x+1 < mapX) { int tempResult = 0; tempResult += map[y][x]; tempResult += map[y+1][x]; tempResult += map[y+2][x]; tempResult += map[y+2][x+1]; setResult(tempResult);
tempResult = 0; tempResult += map[y][x]; tempResult += map[y][x+1]; tempResult += map[y+1][x+1]; tempResult += map[y+2][x+1]; setResult(tempResult);
tempResult = 0; tempResult += map[y+2][x]; tempResult += map[y][x+1]; tempResult += map[y+1][x+1]; tempResult += map[y+2][x+1]; setResult(tempResult);
tempResult = 0; tempResult += map[y][x]; tempResult += map[y+1][x]; tempResult += map[y+2][x]; tempResult += map[y][x+1]; setResult(tempResult);
tempResult = 0; tempResult += map[y][x]; tempResult += map[y+1][x]; tempResult += map[y+1][x+1]; tempResult += map[y+2][x+1]; setResult(tempResult);
tempResult = 0; tempResult += map[y][x+1]; tempResult += map[y+1][x+1]; tempResult += map[y+1][x]; tempResult += map[y+2][x]; setResult(tempResult);
tempResult = 0; tempResult += map[y][x]; tempResult += map[y+1][x]; tempResult += map[y+2][x]; tempResult += map[y+1][x+1]; setResult(tempResult);
tempResult = 0; tempResult += map[y][x+1]; tempResult += map[y+1][x]; tempResult += map[y+1][x+1]; tempResult += map[y+2][x+1]; setResult(tempResult); } }
static void model5(int y, int x) { if (y+1 < mapY && x+2 < mapX) { int tempResult = 0; tempResult += map[y+1][x]; tempResult += map[y+1][x+1]; tempResult += map[y][x+1]; tempResult += map[y][x+2]; setResult(tempResult);
tempResult = 0; tempResult += map[y][x]; tempResult += map[y][x+1]; tempResult += map[y+1][x+1]; tempResult += map[y+1][x+2]; setResult(tempResult);
tempResult = 0; tempResult += map[y][x]; tempResult += map[y][x+1]; tempResult += map[y][x+2]; tempResult += map[y+1][x+2]; setResult(tempResult);
tempResult = 0; tempResult += map[y][x]; tempResult += map[y][x+1]; tempResult += map[y][x+2]; tempResult += map[y+1][x]; setResult(tempResult);
tempResult = 0; tempResult += map[y][x+2]; tempResult += map[y+1][x]; tempResult += map[y+1][x+1]; tempResult += map[y+1][x+2]; setResult(tempResult);
tempResult = 0; tempResult += map[y][x]; tempResult += map[y+1][x]; tempResult += map[y+1][x+1]; tempResult += map[y+1][x+2]; setResult(tempResult);
tempResult = 0; tempResult += map[y][x+1]; tempResult += map[y+1][x]; tempResult += map[y+1][x+1]; tempResult += map[y+1][x+2]; setResult(tempResult);
tempResult = 0; tempResult += map[y][x]; tempResult += map[y][x+1]; tempResult += map[y][x+2]; tempResult += map[y+1][x+1]; setResult(tempResult); } }
static void setResult (int tempResult) { if (result < tempResult) { result = tempResult; } } } |
더하기 계산보다 빼기 계산방식이 더 쉽네요.
2018년 4월 8일 import java.util.Scanner; public class Q14500 { static int[][] map; static int mapY, mapX; static long result = 0; public static void main(String[] args) { Scanner sc = new Scanner(System.in); mapY = sc.nextInt(); mapX = sc.nextInt(); map = new int[mapY][mapX];
for (int i = 0; i < mapY; i++) { for (int j = 0; j < mapX; j++) { map[i][j] = sc.nextInt(); } }
//search 1 for (int i = 0; i < mapY; i++) { for (int j = 0; j < mapX; j++) { model1(i, j); model2(i, j); model3(i, j); model4(i, j); model5(i, j); } } System.out.println(result); }
static void model1(int y, int x) { if (x+3 < mapX) { int tempResult = 0; for (int i = x; i <= x+3; i++) { tempResult += map[y][i]; } setResult(tempResult); } }
static void model2(int y, int x) { if (y+3 < mapY) { int tempResult = 0; for (int i = y; i <= y+3; i++) { tempResult += map[i][x]; } setResult(tempResult); } }
static void model3(int y, int x) { if (y+1 < mapY && x+1 < mapX) { int tempResult = 0; for (int i = y; i <= y+1; i++) { for (int j = x; j <= x+1; j++) { tempResult += map[i][j]; } } setResult(tempResult); } }
static void model4(int y, int x) { if (y+2 < mapY && x+1 < mapX) { int tempResult = 0; for (int i = y; i <= y+2; i++) { for (int j = x; j <= x+1; j++) { tempResult += map[i][j]; } }
int tempResult2 = tempResult; tempResult2 -= map[y][x+1]; tempResult2 -= map[y+1][x+1]; setResult(tempResult2);
tempResult2 = tempResult; tempResult2 -= map[y+1][x]; tempResult2 -= map[y+2][x]; setResult(tempResult2);
tempResult2 = tempResult; tempResult2 -= map[y][x]; tempResult2 -= map[y+1][x]; setResult(tempResult2);
tempResult2 = tempResult; tempResult2 -= map[y+1][x+1]; tempResult2 -= map[y+2][x+1]; setResult(tempResult2);
tempResult2 = tempResult; tempResult2 -= map[y][x+1]; tempResult2 -= map[y+2][x]; setResult(tempResult2);
tempResult2 = tempResult; tempResult2 -= map[y][x]; tempResult2 -= map[y+2][x+1]; setResult(tempResult2);
tempResult2 = tempResult; tempResult2 -= map[y][x+1]; tempResult2 -= map[y+2][x+1]; setResult(tempResult2);
tempResult2 = tempResult; tempResult2 -= map[y][x]; tempResult2 -= map[y+2][x]; setResult(tempResult2); } }
static void model5(int y, int x) { if (y+1 < mapY && x+2 < mapX) { int tempResult = 0; for (int i = y; i <= y+1; i++) { for (int j = x; j <= x+2; j++) { tempResult += map[i][j]; } }
int tempResult2 = tempResult; tempResult2 -= map[y][x]; tempResult2 -= map[y+1][x+2]; setResult(tempResult2);
tempResult2 = tempResult; tempResult2 -= map[y][x+2]; tempResult2 -= map[y+1][x]; setResult(tempResult2);
tempResult2 = tempResult; tempResult2 -= map[y+1][x]; tempResult2 -= map[y+1][x+1]; setResult(tempResult2);
tempResult2 = tempResult; tempResult2 -= map[y+1][x+1]; tempResult2 -= map[y+1][x+2]; setResult(tempResult2);
tempResult2 = tempResult; tempResult2 -= map[y][x]; tempResult2 -= map[y][x+1]; setResult(tempResult2);
tempResult2 = tempResult; tempResult2 -= map[y][x+1]; tempResult2 -= map[y][x+2]; setResult(tempResult2);
tempResult2 = tempResult; tempResult2 -= map[y][x]; tempResult2 -= map[y][x+2]; setResult(tempResult2);
tempResult2 = tempResult; tempResult2 -= map[y+1][x]; tempResult2 -= map[y+1][x+2]; setResult(tempResult2); } }
static void setResult (int tempResult) { if (result < tempResult) { result = tempResult; } } } |
'코딩 > 삼성 SW 역량 테스트 기출' 카테고리의 다른 글
12100번) 2048 (Easy) (0) | 2018.04.08 |
---|---|
13458번) 시험 감독 (0) | 2018.04.08 |
14499번) 주사위 굴리기 (0) | 2018.04.08 |
14501번) 퇴사 (0) | 2018.04.07 |
14891번) 톱니바퀴 (0) | 2018.04.07 |