문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/60059
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
코드:
class Solution {
public boolean solution(int[][] key, int[][] lock) {
for (int i = 0; i < 4; i++) {
rotate(key);
if (check(key, lock)) {
return true;
}
}
return false;
}
public boolean check(int[][] key, int[][] lock) {
int len = key.length + 2 * (lock.length - 1);
int[][] tmpKey = new int[len][len];
for (int i = lock.length - 1; i < lock.length - 1 + key.length; i++) {
for (int j = lock.length - 1; j < lock.length - 1 + key.length; j++) {
tmpKey[i][j] = key[i - lock.length + 1][j - lock.length + 1];
}
}
for (int i = 0; i <= tmpKey.length - lock.length; i++) {
label : for (int j = 0; j <= tmpKey.length - lock.length; j++) {
int[][] tmpLock = new int[lock.length][lock.length];
copy(tmpLock, lock);
for (int r = 0; r < lock.length; r++) {
for (int l = 0; l < lock.length; l++) {
if(tmpKey[i+r][j+l] * tmpLock[r][l] == 1) continue label;
if(tmpKey[i+r][j+l] == 1 && tmpLock[r][l] == 0){
tmpLock[r][l] = 1;
}
}
}
if(isOpen(tmpLock)) return true;
}
}
return false;
}
private void print(int[][] arr) {
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr.length; j++) {
System.out.print(arr[i][j]+" ");
}
System.out.println();
}
System.out.println("---------");
}
public boolean isOpen(int[][] tmpLock) {
for (int i = 0; i < tmpLock.length; i++) {
for (int j = 0; j < tmpLock.length; j++) {
if(tmpLock[i][j] == 0) return false;
}
}
return true;
}
public void copy(int[][] to, int[][] from) {
for (int i = 0; i < from.length; i++) {
for (int j = 0; j < from.length; j++) {
to[i][j] = from[i][j];
}
}
}
public void rotate(int[][] key) {
int[][] tmp = new int[key.length][key[0].length];
for (int i = 0; i < key.length; i++) {
for (int j = 0; j < key.length; j++) {
tmp[j][key[0].length - 1 - i] = key[i][j];
}
}
for (int i = 0; i < key.length; i++) {
for (int j = 0; j < key.length; j++) {
key[i][j] = tmp[i][j];
}
}
}
}
'PS > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 양궁대회 - JAVA(자바) (0) | 2023.11.11 |
---|---|
프로그래머스 2023 KAKAO BLIND RECRUITMENT - 이모티콘 할인행사[JAVA] (0) | 2023.11.10 |
프로그래머스 2023 KAKAO BLIND RECRUITMENT - 개인정보 수집 유효기간[JAVA] (0) | 2023.11.06 |
프로그래머스 2022 KAKAO BLIND RECRUITMENT - k진수에서 소수 개수 구하기[JAVA] (0) | 2023.11.01 |
프로그래머스 2020 KAKAO BLIND RECRUITMENT - 괄호 변환[JAVA] (1) | 2023.10.31 |