-
[Programmers] ์๋ฌผ์ ์ ์ด์ with PythonPS 2021. 11. 29. 20:54728x90๋ฐ์ํ
๐ Programmers - [์๋ฌผ์ ์ ์ด์ ]
๐ก ์กฐ๊ฑด
key
๋M x M(3 โค M โค 20, M์ ์์ฐ์)
ํฌ๊ธฐ 2์ฐจ์ ๋ฐฐ์ดlock
์N x N(3 โค N โค 20, N์ ์์ฐ์)
ํฌ๊ธฐ 2์ฐจ์ ๋ฐฐ์ดM์ ํญ์ N ์ดํ
,key
์lock
์ ์์๋0 ๋๋ 1
- ์๋ฌผ์ ๋ ํ์ด ์์ผ๋ฉฐ, ์ด์ ๋ ๋๊ธฐ๊ฐ ์๋ค. ์ด์ ๋ ํ์ ์ด ๊ฐ๋ฅํ๋ค.
- ์๋ฌผ์ ๋ถ๋ถ์ด ํ์ ํ ์ ์๋ ์ด์ ์ ๊ฒน์ณ์ ธ์ ๋ชจ๋ 1์ด ๋๋ค๋ฉด ์ด ์ ์์ผ๋
True
, ์ด ์ ์๋ค๋ฉดFalse
๋ฅผ ๋ฐํ - ๊ตฌํ & ์๋ฎฌ๋ ์ด์ ์ ํ์ ๋ฌธ์
๐ฅ ์์ค ์ฝ๋
def turn_key(l, key): new_key = [item[:] for item in key] for i in range(l): for j in range(l): new_key[i][j] = key[l - (j + 1)][i] return new_key def check(lock, lock_l): for i in range(lock_l): for j in range(lock_l): if lock[i + lock_l][j + lock_l] != 1: return False return True def solution(key, lock): key_l = len(key) lock_l = len(lock) new_lock = [[0] * (lock_l * 3) for _ in range(lock_l * 3)] new_len = len(new_lock) for i in range(lock_l): for j in range(lock_l): new_lock[i + lock_l][j + lock_l] = lock[i][j] for i in range(4): key = turn_key(key_l, key) for i in range(new_len - key_l): for j in range(new_len - key_l): for k in range(key_l): for p in range(key_l): new_lock[i + k][j + p] += key[k][p] if check(new_lock, lock_l): return True else: for k in range(key_l): for p in range(key_l): new_lock[i + k][j + p] -= key[k][p] return False
๐ ์์ ๋ฐ ์คํ๊ฒฐ๊ณผ
์์
print(solution([[0, 0, 0], [1, 0, 0], [0, 1, 1]], [[0, 0, 0, 0], [1, 1, 1, 0], [0, 0, 0, 0], [1, 0, 1, 0]]))
์คํ๊ฒฐ๊ณผ
true
โจ๏ธ ๋ฌธ์ ํ์ด
N
๊ณผM
์ ์ต๋ ํฌ๊ธฐ๊ฐ20
์ด๋, ์ด์ ์ ์ต์ํฌ๊ธฐ์ธ 3๋งํผ ์๋ฌผ์ ์ ๊ธธ์ด์ ๊ณฑํด์ ๋งต์ ๋ปฅํ๊ธฐ ์ํจ๋ค.
์ด ์์ ์ ์ด์ ๋ฅผ ์์ง์ด๊ธฐ ํธํ๊ธฐ ์ํด์ ์ ์ฒด ๋งต์ ํฌ๊ธฐ๋ฅผ ํค์ฐ๋ ๊ฒ.๋งต์ ํฌ๊ธฐ๋ฅผ ์ธ๋ฐฐ๋ก ๋ํ๋ค๋ฉด, ์๋ ์๋ฌผ์ ๋ฅผ ๊ฐ์ด๋ฐ ์์น์ ์์น์ํจ๋ค.
for i in range(lock_l): for j in range(lock_l): new_lock[i + lock_l][j + lock_l] = lock[i][j]
- ์ด์ ๋ ์ด 4๋ฐฉํฅ์ผ๋ก ๋ ์ ์์ผ๋, ์ด์ ๋ฅผ ๋ฏธ๋ฆฌ ํ ๋ฒ ๋๋ฆฌ๊ณ ์ด๋์ํค๋ฉด์ ์๋ฌผ์ ๊ฐ ์ด๋ฆฌ๋์ง ์ฒดํฌํ๋ฉด ๋๋ค.
key = turn_key(key_l, key) def turn_key(l, key): new_key = [item[:] for item in key] for i in range(l): for j in range(l): new_key[i][j] = key[l - (j + 1)][i] return new_key
- ์ด์ ๋ฅผ 0, 0 ๋ถํฐ new_lock ์ ํฌ๊ธฐ์์ key์ ๊ธธ์ด๋งํผ ๋บ ๊ฐ๊น์ง ์ด๋์ํค๋ฉด์ ๋ฐ๋ณต์ํ๋ฅผ ํ๋ค.
def check(lock, lock_l): for i in range(lock_l): for j in range(lock_l): if lock[i + lock_l][j + lock_l] != 1: return False return True
๐พ ๋๋์
- ์ด์ ๋ฅผ ๋๋ฆฌ๋ ๊ฒ์์ ํค๋งฌ๋ปํ์ง๋ง, ๋ฐ๋ณต ์๋ฌ๋์ ์ ํ ์ ์์๋ค.
- ์๋ฌผ์ ์ ์ ์ฒด ํฌ๊ธฐ๋ฅผ ํค์์ ํ๋ ๋ฐฉ๋ฒ์ N, M ์ ํฌ๊ธฐ๊ฐ ์์ ๊ฒ์ ํ์ธํ๊ณ ์๊ฐํด๋ผ ์ ์์๋ค.
- ์ญ์ ์๋ฎฌ๋ ์ด์ & ๊ตฌํ ๋ฌธ์ ๋ ์ด๋ ต๋ค.
๋ฐ์ํ'PS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 2841 ์ธ๊ณ์ธ์ ๊ธฐํ ์ฐ์ฃผ with Python (0) 2021.12.01 [๋ฐฑ์ค] 2304 ์ฐฝ๊ณ ๋ค๊ฐํ with Python (0) 2021.11.29 [Programmers] ๊ธฐ๋ฅ๊ณผ ๋ณด ์ค์น with Python (0) 2021.11.28 [Programmers] ํ๋ณดํค with Python (0) 2021.11.27 [Programmers] ์คํ์ฑํ ๋ฐฉ with Python (0) 2021.11.21