[Programmers] ์๋ฌผ์ ์ ์ด์ (2020 KAKAO BLIND RECRUITMENT)
[Programmers] ์๋ฌผ์ ์ ์ด์ (2020 KAKAO BLIND RECRUITMENT) JAVA
๋ฌธ์ : ์๋ฌผ์ ์ ์ด์ (2020 KAKAO BLIND RECRUITMENT)
๋ฌธ์ ์ค๋ช
ํฌ๊ธฐ๊ฐ N*N
์ธ ์๋ฌผ์ ์ ํฌ๊ธฐ๊ฐ M*M
์ธ ์ด์ ๊ฐ ์ฃผ์ด์ง๋๋ค.
์๋ฌผ์ ์ ์ด์ ๋ ๊ฐ๊ฐ ํ์ธ ๋ถ๋ถ๊ณผ ๋๊ธฐ์ธ ๋ถ๋ถ์ด ์์ต๋๋ค.
์ด๋ ์๋ฌผ์ ๋ณด๋ค ํฌ๊ธฐ๊ฐ ํญ์ ์๊ฑฐ๋ ๊ฐ์ ์ด์ ๋ฅผ 90๋์ฉ ํ์ ํ๊ฑฐ๋ ์ด๋์์ผ์ ์๋ฌผ์ ์ ์ด์ ์๋ก์ ํ๊ณผ ๋๊ธฐ ๋ถ๋ถ์ ๋ง์ถ๋ ๊ฒ์ด ๋ฌธ์ ์
๋๋ค.
solution ๋ฉ์๋์์ ๋ง์ถ ์ ์๋ ๊ฒฝ์ฐ์ ์๊ฐ ์๋ค๋ฉด true
, ๋ง์ถ ์ ์๋ ๊ฒฝ์ฐ์ ์๊ฐ ์กด์ฌํ์ง ์๋๋ค๋ฉด false
๋ฅผ return
ํด์ผ ํฉ๋๋ค.
Solution
์์ ํ์
๋ง์ฝ ์ด๋ ํ ๋ฐฉ๋ฒ์ ์จ๋ ๋ง์ถ ์ ์๋ค๋ฉด false๋ฅผ returnํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ํ์ธํด์ผ ํฉ๋๋ค.
๋ ํ, ์๋ฌผ์ ์ ์ต๋ ํฌ๊ธฐ๊ฐ 20*20(400)์ผ๋ก ์ถฉ๋ถํ ์์ ํฌ๊ธฐ์ด๋ฏ๋ก ์์ ํ์์ผ๋ก ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ์ดํด๋ด์ผ ํฉ๋๋ค.
์๋ฌผ์ ์ ํฌ๊ธฐ๋ฅผ 3๋ฐฐ ํ๋ํ map์ ๋ง๋ ๋ค ๊ฐ์ด๋ฐ์ ์๋์ ์๋ฌผ์ ์ ์ซ์๋ฅผ ๋ฃ์ด์ค๋๋ค.
๊ทธ ํ ์ด์ ์ ๋งต์ 90๋์ฉ 4๋ฒ ํ์ ํ๋ฉฐ ํ ์นธ ํ ์นธ ํ์ธํ๋ฉด ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
์ด๋ ํ์ 0, ๋๊ธฐ ๋ถ๋ถ์ 1์ด๋ฏ๋ก ํ์ฅ๋ ์๋ฌผ์ ์ ์ด์ ๊ฐ์ ๋ํ์ ๋, ๊ฐ์ด๋ฐ์ ์๋ ์๋ฌผ์ ํฌ๊ธฐ์ ๋ฐฐ์ด์ ๋ชจ๋ ์๊ฐ 1์ด๋ผ๋ฉด ์ด์ ๋ก ์๋ฌผ์ ๊ฐ ์ด๋ฆฌ๋ ๊ฒฝ์ฐ์
๋๋ค.
Description
- ๊ฐ์ด๋ฐ ์๋ฌผ์ ๋ฐฐ์ด์ ๊ฐ์ด ๋ชจ๋ 1์ธ์ง ํ์ธํ๋ ๊ฒ์
isSuccsess
๋ฉ์๋๋ฅผ ์ด์ฉํ์ต๋๋ค. - 90๋์ฉ ํ์ ์ํค๋ ๊ฒ์
rotMap
๋ฉ์๋์์ ๊ตฌํํ์ต๋๋ค.
์์ค์ฝ๋
class Solution {
public static boolean isSuccsess(int[][] map){
int size= map.length/3;
boolean result = true;
for(int i=size;i<2*size;i++){
for(int j=size;j<2*size;j++){
if (map[i][j]!=1) result=false;
}
}
return result;
}
public static int[][] rotMap(int[][] map){
int mapSize = map.length;
int[][] returnMap = new int[mapSize][mapSize];
for(int i=0;i<mapSize;i++){
for(int j=0;j<mapSize;j++){
returnMap[i][j] = map[mapSize-j-1][i];
}
}
return returnMap;
}
public boolean solution(int[][] key, int[][] lock) {
int m = key.length;
int n = lock.length;
int[][] map = new int[n*3][n*3];
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
map[n+i][n+j] = lock[i][j];
}
}
for(int z=0;z<4;z++){
key = rotMap(key);
for(int x=0;x<2*n;x++){
for(int y=0;y<2*n;y++){
for(int i=0;i<m;i++){
for(int j=0;j<m;j++){
map[x+i][y+j]+=key[i][j];
}
}
if(isSuccsess(map)) return true;
for(int i=0;i<m;i++){
for(int j=0;j<m;j++){
map[x+i][y+j]-=key[i][j];
}
}
}
}
}
return false;
}
}