19-20 동계 모각코 동아리 7회차 결과

 

백준

테트로미노

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);
				}
			}
		}
	}

}

카잉 달력 문제는 결과는 제대로 출력이되는데 시간 초과가 뜨는 문제가 있다. 모각코 시간내에 해결을 못했기 때문에 시간이 날 때 다시 풀어볼 예정이다.