ํฐ์คํ ๋ฆฌ ๋ทฐ
[Java] ํ๋ก๊ทธ๋๋จธ์ค - ์๋ฌผ์ ์ ์ด์
๊ฐ๋ฐ๊ฐ๊ตด๐ธ 2022. 6. 13. 21:25[๋ฌธ์ ]
[ํ์ด]
์ด์ ๊ฐ ํ์ด๋์จ ๋ถ๋ถ๊ณผ, ์ ๊ธ์ฅ์น์ ํ์ธ๋ถ๋ถ ์ขํ๋ง ๊ฐ๊ฐ ์ ์ฅํ ํ, ์๋์ ๊ฐ์ ๋ฐฉ์์ผ๋ก ๊ฐ๋ฅํ ๋ชจ๋ ์ด์ ์ ์์น๋ฅผ ์ฎ๊ฒจ๊ฐ๋ฉฐ ํ์ํ์์ง๋ง ์๊ฐ์ด๊ณผ๋ก ์คํจํ์์ต๋๋ค.
์ : x, y - 1
์ค๋ฅธ์ชฝ : x + 1, y
์ผ์ชฝ : x - 1, y
์๋ : x, y + 1
90*ํ์ : y,x
๋ฐ๋ผ์ ํด๋น ๋ธ๋ก๊ทธ๋ฅผ ์ฐธ๊ณ ํ์ฌ ํ์ด๋ฅผ ์งํํ์์ต๋๋ค.
https://jellyinghead.tistory.com/28
์๋ฌผ์ ์ ํฌ๊ธฐ๋ฅผ n์์ n+2*(m-1)๋ก ํ์ฅํ์ฌ ์๋ก์ด ๋ฐฐ์ด extended[][] ์ ๋ง๋ค์ด ์ด์ ๋ฅผ ๋ฐฐ์ด์ ๋ชจ๋ ์์น์ ์ฌ๋ ค์ ์ฐพ์๋ณด๋ฉด ๋๋ ๊ฑฐ์์ต๋๋ค.
- moveKey()๋ฅผ ํตํด ๊ฐ๋ฅํ ๋ชจ๋ ์ด์ ๋ฅผ ๊ฝ์๋ณด๋ฉฐ ํ์ํฉ๋๋ค.
- unLock()์ ํตํด ์๋ฌผ์ ์ ํค๋ฅผ ์ ํํ ๊ฝ์์ ์๋์ง ํ์ธํฉ๋๋ค. ์ด๋, ๋ง์ฝ 1์ ๊ฐ์ง ๋ชจ๋ ํค์ ๊ฐ์ด ์ค์ ์๋ฌผ์ ์ ์ขํ์ธ
(m-1 ~ N-m, m-1~N-m)์ ์์นํ๋ค๋ฉด ์๋ฌผ์ ์ ๊ฝํ๊ฒ์ผ๋ก ๊ฐ์ฃผํ๊ณ cnt++๋ฅผ ์คํํฉ๋๋ค.
- ๋ง์ฝ, ์๋ฌผ์ ์ ํ์ธ ๊ฐ์ hole == cnt ๋ผ๋ฉด ์๋ฌผ์ ๋ ํ๋ ธ๋ค๊ณ ๊ฐ์ฃผํฉ๋๋ค.
[์ฝ๋]
import java.util.*;
class Solution {
public static int n;
public static int m;
public static int N;
public static int extened[][]; // ํ์ฅ๋ lock
public static int hole = 0;
public boolean solution(int[][] key, int[][] lock) {
boolean answer = true;
n = lock.length;
m = key.length;
N = n + 2*(m-1);
extened = new int[N][N];
extend(lock);
answer = moveKey(key);
return answer;
}
public static void extend(int[][] lock) {
for(int i = 0; i < n; i++) {
for(int j = 0; j < n; j++) {
if(lock[i][j] == 0) {
hole++;
}
extened[m-1+i][m-1+j] = lock[i][j];
}
}
// for(int i = 0; i < N; i++) {
// for(int j = 0; j < N; j++) {
// System.out.print(extened[i][j] + " ");
// }
// System.out.println();
// }
// System.out.println(hole);
}
public static boolean moveKey(int[][] key) {
for(int i = 0; i <= N-m; i++) {
for(int j = 0; j <= N-m; j++) {
//์๋ฌผ์ ์ ํค๋ฅผ ๊ฝ์
if(unLock(key,i,j)){
return true;
}
}
}
for(int k=0;k<3;k++) {
key = rotate(key);
for(int i = 0; i <= N-m; i++) {
for(int j = 0; j <= N-m; j++) {
//์๋ฌผ์ ์ ํค๋ฅผ ๊ฝ์
if(unLock(key,i,j)){
return true;
}
}
}
}
return false;
}
public static boolean unLock(int[][] key, int i, int j) {
int cnt = 0;
for(int x = 0; x < m; x++) {
for(int y = 0; y < m; y++) {
if(extened[i+x][j+y] == 1 && key[x][y] == 1) {
return false;
}
else if(extened[i+x][j+y] == 0 && key[x][y] == 1) {
if(m-1 <= x+i && x+i <= N-m && m-1 <= y+j && y+j <= N-m) {
cnt++;
}
}
}
}
if(cnt == hole) {
return true;
}
return false;
}
public static int[][] rotate(int key[][]) {
int len = key.length;
int convert[][] = new int[len][len];
for(int i = 0; i < len; i++) {
for(int j = 0; j < len; j++) {
convert[j][len-i-1] = key[i][j];
}
}
return convert;
}
}
'Algorithm > Programmers' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] ํ๋ก๊ทธ๋๋จธ์ค - ํคํจ๋ ๋๋ฅด๊ธฐ (0) | 2022.07.03 |
---|---|
[Java] ํ๋ก๊ทธ๋๋จธ์ค - ์ถ์ ํธ๋ํฝ (0) | 2022.06.13 |
[Java] ํ๋ก๊ทธ๋๋จธ์ค - ๋ก๋์ ์ต๊ณ ์์์ ์ต์ ์์ (0) | 2022.06.05 |
[Java] ํ๋ก๊ทธ๋๋จธ์ค - ์ซ์ ๋ฌธ์์ด๊ณผ ์๋จ์ด (0) | 2022.06.05 |
[Java] ํ๋ก๊ทธ๋๋จธ์ค - ์ ํ๋ฒ์ค (0) | 2022.06.05 |
- Total
- Today
- Yesterday
- Baekjoon
- http
- ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ
- ํ๋ก๊ทธ๋๋จธ์ค
- 2019 ์นด์นด์ค ๊ฐ๋ฐ์ ๊ฒจ์ธ ์ธํด
- ๋ฐฑ์ค javascript
- ๋ฐฑ์ค
- ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ
- ๋ ์์ปฌ ํ๊ฒฝ
- ์ฝ๋ฉํ ์คํธ
- map
- ์๋ฐ
- ํฌํฌ์ธํฐ
- ์ด๋ถํ์
- ์๊ณ ๋ฆฌ์ฆ
- ํจ์ํ ํ๋ก๊ทธ๋๋ฐ
- fp
- git
- ์๋ฐ์คํฌ๋ฆฝํธ
- ํ๋กํ ์ฝ
- ๋ฐฑ์ค node.js
- ๋์์ธ ํจํด
- ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ deep dive
- ์นด์นด์ค ์ธํด
- ๋คํธ์ํฌ
- TDD
- ํ๋กํผํฐ
- ์ด์์ฒด์
- ์ ์ญ ๋ณ์
- JavaScript
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 |