๐โ๏ธ๋ฌธ์ ๋ถ์
- ์๋ฌผ์ ์ ํ๊ณผ ์ด์ ์ ๋๊ธฐ๊ฐ ๋ฑ ๋ง์์ผ ํจ
- ๋๊ธฐ, ๋๊ธฐ / ํ, ํ ์ ๋ง๋๋ฉด ์๋จ
- ์ด ์ ์์ผ๋ฉด True, ์๋๋ฉด False
- key M * M (3 <= M <=20)
- lock N * N (3 <= N <=20)
- M <= N
- 0: ํ, 1:๋๊ธฐ
๐ ์ด์ฝํ
๋ต์
# 2์ฐจ์ ๋ฆฌ์คํธ 90๋ ํ์ ํ๊ธฐ
def rotate_a_matrix_by_90_degree(a):
n = len(a) # ํ ๊ธธ์ด ๊ณ์ฐ
m = len(a[0]) # ์ด ๊ธธ์ด ๊ณ์ฐ
result = [[0] * n for _ in range(m)] # ํ์ ๋ ๊ฒฐ๊ณผ ๋ฆฌ์คํธ
# ๋ชจ๋ ์์๊ฐ์ 90๋ ํ์
for i in range(n):
for j in range(m):
result[j][n - i - 1] = a[i][j]
return result
# ์๋ฌผ์ ์ ํ๋ถ๋ถ์ด ๋ชจ๋ 1๋ก ์ฑ์์ก๋์ง ํ์ธ
def check(new_lock):
for i in range(len(new_lock)//3, (len(new_lock)//3)*2):
for j in range(len(new_lock)//3, (len(new_lock)//3)*2):
if new_lock[i][j] != 1:
return False
return True
def solution(key, lock):
# ์๋ฌผ์ ์ ํฌ๊ธฐ ์ธก์
n = len(lock)
# ์ด์ ์ ํฌ๊ธฐ ์ธก์
m = len(key)
# ์๋ฌผ์ ์ ํฌ๊ธฐ ํ์ฅ
new_lock = [[0]*(n*3) for _ in range(n*3)]
# ์๋ก์ด ์๋ฌผ์ ์ ์ค์ ๋ถ๋ถ์ ๊ธฐ์กด์ ์๋ฌผ์ ๋ฃ๊ธฐ
for i in range(n):
for j in range(n):
new_lock[i+n][j+n] = lock[i][j]
# ์ด์ ๋ฅผ ํ์ ํ ๋ค, ํด๋น ์ด์ ๋ก ์๋ฌผ์ ๋ฅผ ํ์ํ๋ฉฐ, ์ด๋ฅผ ๋ฐ๋ณตํจ
for _ in range(4):
# ์ด์ ํ์
key = rotate_a_matrix_by_90_degree(key)
for i in range(n*2):
for j in range(n*2):
# ์๋ฌผ์ ์ ์ด์ ์ฑ์ฐ๊ธฐ
for k in range(m):
for l in range(m):
new_lock[i+k][j+l] += key[k][l]
# ์๋ฌผ์ ์ ํ๋ถ๋ถ์ด ๋ชจ๋ 1๋ก ์ฑ์์ก๋์ง ํ์ธ
if (check(new_lock) == True):
return True
# ์๋ฌผ์ ์์ ์ด์ ๋ค์ ๋นผ๊ธฐ
for k in range(m):
for l in range(m):
new_lock[i+k][j+l] -= key[k][l]
return False
๐ ์ ๋ต ๋ถ์
๐ ๊ธฐ์ตํ ๊ฒ!
- ํ์ด์ฌ์ 1์ด์ 2000๋ง์์ 1์ต ์ ๋์ ์ฐ์ฐ ๊ฐ๋ฅ! -> ์ด ์ดํ์ ๊ฒฝ์ฐ์ ์๋ ์์ ํ์์ด ๊ฐ๋ฅํ๋ค๊ณ ๋ณผ ์ ์์
- ํค๊ฐ ๋ฐ์ผ๋ก ๋๊ฐ๋ ๋๋ฏ๋ก ์๋ฌผ์ ๋ณด๋๋ฅผ ํค์์ ์๊ฐ -> ๋์ด๊ฐ๋ ๊ฒฝ์ฐ์ ์๋ ์ฝ๊ฒ ์ฐ์ฐํ ์ ์์!
- 2์ฐจ์ ํจ์ 90๋ ํ์ ํ๋ ํจ์๋ ์์ฃผ ์ฐ์ ์ฝ๋ ๊ธฐ์ตํด ๋๊ธฐ!
๋๊ธ