https://school.programmers.co.kr/learn/courses/30/lessons/60059
ํ๋ก๊ทธ๋๋จธ์ค
์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์ ๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์ ๋ง์ถคํ ํ๋กํ์ ๋ฑ๋กํ๊ณ , ๋์ ๊ธฐ์ ๊ถํฉ์ด ์ ๋ง๋ ๊ธฐ์ ๋ค์ ๋งค์นญ ๋ฐ์ผ์ธ์.
programmers.co.kr
์ฐ์ ์ง์ง ์ด๋ ต๋ค
์ผ๋จ ์์ด๋์ด ์์ฒด๋ฅผ ๋ ์ฌ๋ฆฌ๋ ๊ฑด ์์ฃผ ํฌ๊ฒ ์ด๋ ต์ง๋ ์๋ค
๊ทธ๋ ์ง๋ง ์ด๊ฒ์กฐ์ฐจ ๋ฌด์ง์ฑ์ผ๋ก ํ๋ฉด ๋นํจ์จ์ ์ด๊ณ , ๋จธ๋ฆฌ๋ฅผ ์ฐ๊ธด ์จ์ผํจ
๋ฌธ์ ์กฐ๊ฑด์ด๋ค.
M๊ณผ N์ด ์์ฃผ ์์ ์ ์์ด๊ธฐ ๋๋ฌธ์ ,ํ๋ํ๋ ๋ค ๋ผ์๋ด๋ ์๊ฐ์ด๊ณผ๊ฐ ๋์ง ์๊ฒ ๋ค๋ ์๊ฐ์ด ๋ค์ด์ผํ๋ค.
์ด์ ๋ถํฐ ๋ฌธ์ ๋ ์ด๊ฒ์ ์ด๋ป๊ฒ ๊ตฌํํ ๊ฒ์ธ์ง์ด๋ค.
์ฐ์ key๋ฅผ ํ๋ํ๋ ๋ผ์๋ณด๊ธฐ ์ ์, ๋ณด๋ค ํธํ๊ฒ ํ๊ธฐ ์ํด์
lock ๋ฆฌ์คํธ ํฌ๊ธฐ๋ฅผ 3๋ฐฐ ํ์ฅํด์ค๋ค.
<lock: ํ์ฅ ์ >
1 | 1 | 1 |
1 | 1 | 0 |
1 | 0 | 1 |
<newLock: ํ์ฅ ํ>
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
0 | 0 | 0 | 1 | 1 | 1 | 0 | 0 | 0 |
0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 |
0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 0 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
์ด ์ํ์์ ์ด์ ๋ฅผ ํ์ ํ๊ฑฐ๋ ์ฎ๊ฒจ๊ฐ๋ฉด์ ๋ฐฐ์ด์ ๋ผ์๋ง์ถฐ๋ณธ๋ค.
์ด์ ๋ฅผ ๋ผ์๋ณธ ๋ค์๋ lock์ ํด๋นํ๋ ํ์ ๋ถ๋ถ์ ์ซ์๊ฐ ๋ชจ๋ 1์ธ์ง ์ฒดํฌํ๋ฉด ๋๋ค.
(๋ชจ๋ 1์ด ๋๋ฉด true๋ฅผ ๋ฆฌํดํ๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด ์ด์ ๋ฅผ ํ์ ํ๊ฑฐ๋ ์ฎ๊ฒจ์ ๋ค์ ๋ผ์๋ณด๋ ์์ ์ ๋ฐ๋ณต)
์ด์ ํ์ ์ํค๊ธฐ
#๋ฐฐ์ด 90๋ ํ์ ์ํค๊ธฐ
def rotate(arr):
n, m = len(arr), len(arr[0])
result = [[0]*n for _ in range(m)]
for i in range(n):
for j in range(m):
result[j][n-i-1] = arr[i][j]
return result
์ฐธ๊ณ : 2์ฐจ์๋ฐฐ์ด ์ค๋ฅธ์ชฝ์ผ๋ก 90๋ ํ์ ์ํค๊ธฐ
์ ์ฒด ์์ค์ฝ๋
#์ด์ ํ์ ์ํค๊ธฐ
def rotate(arr):
n, m = len(arr), len(arr[0])
result = [[0]*n for _ in range(m)]
for i in range(n):
for j in range(m):
result[j][n-i-1] = arr[i][j]
return result
#์๋ฌผ์ ๋ฐฐ์ด์ ๊ฐ์ด ๋ชจ๋ ์ ํํ 1์ธ์ง ์ฒดํฌ
def check(newLock):
length = len(newLock)//3
for i in range(length,length*2):
for j in range(length,length*2):
if newLock[i][j] != 1:
return False
return True
def solution(key, lock):
n = len(lock)
m = len(key)
#์๋ฌผ์ ๋ฐฐ์ด 3๋ฐฐ ํ์ฅํ๊ธฐ
newLock = [[0 for j in range(n*3)] for i in range(n*3)]
for i in range(n,n*2):
for j in range(n,n*2):
newLock[i][j] = lock[i-n][j-n]
#key๋ฅผ 4๋ฒ ํ์ ์ํค๋ฉด์ ํ์ธ
for rotation in range(4):
key = rotate(key)
for x in range(n*2):
for y in range(n*2):
#์ด์ ๊ปด๋ณด๊ธฐ
for i in range(m):
for j in range(m):
newLock[x+i][y+j] += key[i][j]
#์ด๋ฆฌ๋์ง ์ฒดํฌ
if check(newLock) == True:
return True
#์ด์ ๋นผ๊ธฐ
for i in range(m):
for j in range(m):
newLock[x+i][y+j] -= key[i][j]
return False
์ถ์ฒ: ์ด๊ฒ์ด ์ทจ์ ์ ์ํ ์ฝ๋ฉํ ์คํธ๋ค with ํ์ด์ฌ (๋๋๋น)
'์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ํ์ด' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค] ์คํจ์จ (0) | 2023.03.09 |
---|---|
[๋ฐฑ์ค]18310๋ฒ: ์ํ ๋ (2) | 2023.03.09 |
[ํ๋ก๊ทธ๋๋จธ์ค] ๊ฒน์น๋ ์ ๋ถ์ ๊ธธ์ด (0) | 2023.03.04 |
[๋ฐฑ์ค]10825๋ฒ: ๊ตญ์์ (0) | 2023.03.04 |
[ํ๋ก๊ทธ๋๋จธ์ค] ์ ์ฃผ์ ์ซ์ 3 (0) | 2023.03.04 |