728x90
public class Solution {
public boolean solution(int[][] key, int[][] lock) {
int padSize = lock.length - 1;
for (int i = 0; i < 4; i++) {
key = rotate(key);
int[][] paddedKey = pad(key, padSize);
for (int j = 0; j < paddedKey.length - padSize; j++) {
for (int k = 0; k < paddedKey.length - padSize; k++) {
if (isValid(lock, paddedKey, j, k)) {
return true;
}
}
}
}
return false;
}
private boolean isValid(int[][] lock, int[][] paddedKey, int j, int k) {
for (int l = 0; l < lock.length; l++) {
for (int m = 0; m < lock.length; m++) {
if (lock[l][m] + paddedKey[j + l][k + m] != 1) {
return false;
}
}
}
return true;
}
private int[][] pad(int[][] key, int padSize) {
int[][] result = new int[key.length + padSize * 2][key.length + padSize * 2];
for (int i = 0; i < key.length; i++) {
for (int j = 0; j < key.length; j++) {
result[padSize + i][padSize + j] = key[i][j];
}
}
return result;
}
private int[][] rotate(int[][] key) {
int[][] result = new int[key.length][key.length];
for (int i = 0; i < key.length; i++) {
for (int j = 0; j < key.length; j++) {
result[i][j] = key[key.length - 1 - j][i];
}
}
return result;
}
private int[][] copy(int[][] key) {
int[][] result = new int[key.length][key.length];
for (int i = 0; i < key.length; i++) {
for (int j = 0; j < key.length; j++) {
result[i][j] = key[i][j];
}
}
return result;
}
}
728x90
'programmers' 카테고리의 다른 글
프로그래머스 2단계 : 이진 변환 반복하기 (Java 자바) (0) | 2023.09.20 |
---|---|
프로그래머스 3단계 : 1차 셔틀버스 (Java 자바) (1) | 2023.09.14 |
프로그래머스 3단계 : 합승 택시 요금 (Java 자바) (0) | 2023.09.14 |
프로그래머스 3단계 : 경주로 건설 (Java 자바) (0) | 2023.09.14 |
프로그래머스 3단계 : 다단계 칫솔 (Java 자바) (0) | 2023.09.13 |