백준
테트로미노
package bj;
import java.util.*;
public class bj_14500 {
//int cnt = 3;
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
int max = -9999;
int[][] a = new int[n][m];
int sum = 0;
int result = -9999;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
a[i][j] = sc.nextInt();
max = Math.max(a[i][j], max);
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (max == a[i][j]) {
sum = findT(a, i, j, n, m);
result = Math.max(sum, result);
}
}
}
System.out.println(result);
}
static int findT(int[][] a, int n, int m, int r, int c) {
int sum = 0;
int max = -9999;
int cnt = 3;
while (cnt-- > 0) {
if (n - 1 > 0 && n + 1 < r && m - 1 > 0 && m + 1 < c) {
max = Math.max(Math.max(Math.max(a[n - 1][m], a[n + 1][m]), a[n][m - 1]), a[n][m + 1]);
cnt--;
if (max == a[n - 1][m]) {
sum += findT(a, n - 1, m, r, c);
} else if (max == a[n + 1][m]) {
sum += findT(a, n + 1, m, r, c);
} else if (max == a[n][m - 1]) {
sum += findT(a, n, m - 1, r, c);
} else if (max == a[n][m + 1]) {
sum += findT(a, n, m + 1, r, c);
}
} else if (n + 1 < r && m - 1 > 0 && m + 1 < c) {
max = Math.max(Math.max(a[n + 1][m], a[n][m - 1]), a[n][m + 1]);
if (max == a[n + 1][m]) {
sum += findT(a, n + 1, m, r, c);
} else if (max == a[n][m - 1]) {
sum += findT(a, n, m - 1, r, c);
} else if (max == a[n][m + 1]) {
sum += findT(a, n, m + 1, r, c);
}
} else if (n - 1 > 0 && n + 1 < r && m + 1 < c) {
max = Math.max(Math.max(a[n - 1][m], a[n + 1][m]), a[n][m + 1]);
if (max == a[n - 1][m]) {
sum += findT(a, n - 1, m, r, c);
} else if (max == a[n + 1][m]) {
sum += findT(a, n + 1, m, r, c);
} else if (max == a[n][m + 1]) {
sum += findT(a, n, m + 1, r, c);
}
}
}
return sum;
}
}
지난학기 객체지향 수업 기말 프로젝트 과제가 생각났던 문제이다. 그때 문제와 비슷하게 상하좌우의 블록을 살펴 터뜨리는 기능을 구현 했었다.
카잉달력
package bj;
import java.util.*;
public class bj_6064 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
int T = sc.nextInt();
while (T-- > 0) {
int m = sc.nextInt();
int n = sc.nextInt();
int x = sc.nextInt()-1;
int y = sc.nextInt()-1;
boolean ok = false;
if (x == y) {
System.out.println(x);
} else {
for (int i = x; i<m*n; i+=m) {
if (i % n == y) {
System.out.println(i+1);
ok = true;
break;
}
}
if(!ok){
System.out.println(-1);
}
}
}
}
}
카잉 달력 문제는 결과는 제대로 출력이되는데 시간 초과가 뜨는 문제가 있다. 모각코 시간내에 해결을 못했기 때문에 시간이 날 때 다시 풀어볼 예정이다.