Skip to content

Commit 4a2d086

Browse files
committed
[Week13] PGS 60059: 자물쇠와 열쇠
1 parent db2d507 commit 4a2d086

File tree

2 files changed

+92
-0
lines changed

2 files changed

+92
-0
lines changed
File renamed without changes.
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
import java.util.*;
2+
3+
class Solution {
4+
public boolean solution(int[][] key, int[][] lock) {
5+
boolean answer = false;
6+
7+
int degree = 0;
8+
while (degree < 360) {
9+
int[][] new_key = rotate(key, degree);
10+
11+
boolean flag = false;
12+
for (int i = - new_key.length + 1; i < lock.length; i++) {
13+
if (answer) {
14+
break;
15+
}
16+
17+
for (int j = - new_key[0].length + 1; j < lock[0].length; j++) {
18+
if (isSolved(new_key, lock, i, j)) {
19+
answer = true;
20+
break;
21+
}
22+
}
23+
}
24+
if (answer) {
25+
break;
26+
}
27+
28+
degree += 90;
29+
}
30+
31+
return answer;
32+
}
33+
34+
public boolean isSolved(int[][] key, int[][] lock, int pos_x, int pos_y) {
35+
boolean result = true;
36+
for (int i = 0; i < lock.length; i++) {
37+
if (!result) {
38+
break;
39+
}
40+
41+
for (int j = 0; j < lock[0].length; j++) {
42+
if (pos_y <= i && i < pos_y + key.length
43+
&& pos_x <= j && j < pos_x + key[0].length) {
44+
if (1 != lock[i][j] + key[i - pos_y][j - pos_x]) {
45+
result = false;
46+
break;
47+
}
48+
}
49+
else if (1 != lock[i][j]) {
50+
result = false;
51+
break;
52+
}
53+
}
54+
}
55+
56+
return result;
57+
}
58+
59+
public int[][] rotate(int[][] key, int degree) {
60+
if (degree == 90) {
61+
int[][] new_key = new int[key[0].length][key.length];
62+
for (int i = 0; i < key.length; i++) {
63+
for (int j = 0; j < key[0].length; j++) {
64+
new_key[key[0].length - j - 1][i] = key[i][j];
65+
}
66+
}
67+
return new_key;
68+
}
69+
70+
if (degree == 180) {
71+
int[][] new_key = new int[key.length][key[0].length];
72+
for (int i = 0; i < key.length; i++) {
73+
for (int j = 0; j < key[0].length; j++) {
74+
new_key[key.length - i - 1][key[0].length - j - 1] = key[i][j];
75+
}
76+
}
77+
return new_key;
78+
}
79+
80+
if (degree == 270) {
81+
int[][] new_key = new int[key[0].length][key.length];
82+
for (int i = 0; i < key.length; i++) {
83+
for (int j = 0; j < key[0].length; j++) {
84+
new_key[j][key.length - i - 1] = key[i][j];
85+
}
86+
}
87+
return new_key;
88+
}
89+
90+
return key;
91+
}
92+
}

0 commit comments

Comments
 (0)