삐까냥의 파도타기

14500번) 테트로미노 본문

코딩/삼성 SW 역량 테스트 기출

14500번) 테트로미노

금손형아 2018. 4. 8. 11:19

문제 출처 : 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