Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- back-end
- kotlin
- 네트워크
- Brute-force
- algorithm
- 프로그래머스
- TDD
- 자바
- java
- 백트래킹
- 프로젝트
- programmers
- 그래프
- BFS
- 코틀린
- 스프링
- backtracking
- Java8
- 운영체제
- DFS
- LEVEL2
- OS
- 백준
- 모던자바
- 자료구조
- baekjoon
- Spring
- DP
- 알고리즘
- lambda
Archives
- Today
- Total
요깨비's LAB
[프로그래머스, Java] 자물쇠와 열쇠 본문
class Solution {
static int len;
static int keyLen;
static int lockLen;
static int[][] map;
public boolean solution(int[][] key, int[][] lock) {
boolean answer = true;
keyLen = key.length;
lockLen = lock.length;
len = lockLen + (2 * (lockLen - 1));
// len = keyLen + (2 * (keyLen - 1)); => 착오
map = new int[len][len];
int lockZeroCnt = 0;
for (int i = 0; i < lockLen; i++) {
for (int j = 0; j < lockLen; j++) {
map[i + (lockLen - 1)][j + (lockLen - 1)] = lock[i][j];
if (lock[i][j] == 0) {
lockZeroCnt++;
}
}
}
// 오른쪽 이동
moveDown:
for (int down = 0; down <= len - keyLen; down++) {
// 아래 이동
moveRight:
for (int right = 0; right <= len - keyLen; right++) {
// 90도 회전
rotate:
for (int rotate = 0; rotate < 4; rotate++) {
if (check(down, right, lockZeroCnt, key)) {
return true;
}
key = rotateKey(key, keyLen);
}
}
}
return false;
}
public boolean check(int down, int right, int lockZeroCnt, int[][] key) {
for (int i = 0; i < keyLen; i++) {
for (int j = 0; j < keyLen; j++) {
if (map[down + i][right + j] + key[i][j] > 1) {
return false;
}
if (
(lockLen - 1 <= down + i && i + down <= len - lockLen) &&
(lockLen - 1 <= j + right && j + right <= len - lockLen) &&
map[down + i][right + j] == 0 &&
key[i][j] == 1
) {
lockZeroCnt--;
}
}
}
return lockZeroCnt == 0 ? true : false;
}
public int[][] rotateKey(int[][] key, int keyLen) {
int[][] rotatedMap = new int[keyLen][keyLen];
for (int i = 0; i < keyLen; i++) {
for (int j = 0; j < keyLen; j++) {
rotatedMap[i][j] = key[keyLen - 1 - j][i];
}
}
return rotatedMap;
}
}
'알고리즘(Java) > 프로그래머스' 카테고리의 다른 글
[프로그래머스, Java] 튜플 (0) | 2021.10.16 |
---|---|
[프로그래머스, Java] 수식 최대화 (0) | 2021.10.15 |
[프로그래머스, Java] 거리두기 확인하기 (0) | 2021.09.09 |
[프로그래머스, Java] 메뉴 리뉴얼 (0) | 2021.08.17 |
[프로그래머스, JAVA] 행렬 테두리 회전하기 (0) | 2021.06.15 |
Comments