๋ฌธ์ ์ ๋ชฉ | ์ ๋ต๋ฅ | ๋์ด๋ |
์๋ฌผ์ ์ ์ด์ | 40% | Lv.3 |
ํ๋ก๊ทธ๋๋จธ์ค
์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์ ๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์ ๋ง์ถคํ ํ๋กํ์ ๋ฑ๋กํ๊ณ , ๋์ ๊ธฐ์ ๊ถํฉ์ด ์ ๋ง๋ ๊ธฐ์ ๋ค์ ๋งค์นญ ๋ฐ์ผ์ธ์.
programmers.co.kr
๋ฌธ์ ์์ฝ
์๋ฌผ์ ์ ํ๊ณผ ์ด์ ์ ๋๊ธฐ ๋ถ๋ถ์ด ๋ชจ๋ ์ผ์นํ ๋, ์๋ฌผ์ ๊ฐ ์ด๋ฆฐ๋ค.
์กฐ๊ฑด 1) ์ด์ ๋ ํ์ +์ด๋ํ ์ ์๋ค.
์กฐ๊ฑด 2) ์กฐ๊ฑด1 ์ดํ ์ด์ ์ ๋๊ธฐ๊ฐ ์๋ฌผ์ ์ ๋๊ธฐ์ ์ผ์นํ๋ฉด ์ ๋๋ค.
ํ์ด
Step1. ์๋ฌผ์ ์ ํ๊ณผ ์ด์ ์ ๋๊ธฐ์ ์์น ์ฐพ๊ธฐ
- ์ต๋ ์ ๊ณผ ์ต์ ์ ์ ๊ตฌํ ๋ค ๊ฐ์๋ฅผ ์ผ๋ค.
- y์ถ ์์ ์์ ์ ์์ ์ ์ ๊ฐ์๋ฅผ ์ผ๋ค.(x์ถ ์์ ์์ ์ ์์ ์ ์ ๊ฐ์๋ ์ธ์ง ์๋๋ค)
Step2. ์ด์ ๋ฅผ ํ์ +์ด๋์ํค๋ฉฐ ์๋ฌผ์ ์ ํ๊ณผ ์ด์ ์ ๋๊ธฐ๊ฐ ์ผ์นํ๋์ง ํ์ธ
- ์ ์ด๋ ํ๋์ ์นธ์ ์ผ์นํด์ผ ํ๋ค. ์ด๋๋ฒ์ : #0~lock+key-1
- ์ด์ ์ ๋๊ธฐ์ ์๋ฌผ์ ์ ๋๊ธฐ๊ฐ ํ๋๋ผ๋ ์ผ์นํ๋ฉด ์๋๋ค.
- ์ด์ ์ ๋๊ธฐ์ ์๋ฌผ์ ์ ํ์ด ๋ชจ๋ ์ผ์นํด์ผ ํ๋ค.
- ์ค๋ฅธ์ชฝ 90๋ ํ์ ์ [x, y] -> [y, len(key)-1-x]
โปโป ํ์ด๋ ๋ชจ๋ ๋ง์๋๋ฐ, list๋ ์ฝ์ ๋ ์์๋๋ก ๋ณด์ ์ด ์๋๋ ๊ฒ ๊ฐ๋ค. + heapq์ list์ ์ ์ฌํ ์๊ฐ๋ณต์ก๋๋ฅผ ์ง๋๋ค.
def rotate(key_xy, key_size):
answer=[]
for xy in key_xy:
answer.append([xy[1], key_size-1-xy[0]])
return answer
def solution(key, lock):
key_xy=[[row_idx, col_idx] for row_idx in range(len(key)) for col_idx in range(len(key)) if key[row_idx][col_idx]==1]
lock_xy=[[row_idx, col_idx] for row_idx in range(len(lock)) for col_idx in range(len(lock)) if lock[row_idx][col_idx]==0]
if len(lock_xy)==0:
return True
if len(key_xy)<len(lock_xy):
return False
for _ in range(0, 4):
for row_idx in range(-(len(key)-1), len(lock), 1): #0~lock+key-1
for col_idx in range(-(len(key)-1), len(lock), 1):
now_lock_xy=lock_xy[:]
now_key_xy=[]
for xy in key_xy:
if (xy[0]+row_idx)>=0 and (xy[0]+row_idx)<len(lock) and (xy[1]+col_idx)>=0 and (xy[1]+col_idx)<len(lock):
now_key_xy.append([xy[0]+row_idx, xy[1]+col_idx])
now_key_xy.sort()
now_lock_xy.sort()
while len(now_lock_xy)>0 and len(now_key_xy)>0:
key_element=now_key_xy[-1]
lock_element=now_lock_xy[-1]
if key_element==lock_element:
now_key_xy.pop()
now_lock_xy.pop()
else:
break
if len(now_lock_xy)==0 and len(now_key_xy)==0:
print(_, row_idx, col_idx)
return True
key_xy=rotate(key_xy, len(key))
return False
'์๊ณ ๋ฆฌ์ฆ๐ฅ > ๋ฌธ์ ํ์ด (Python)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Programmers] ๋ฌธ์์ด ์์ถ (Lv.2) 2024/4/2 (0) | 2024.04.02 |
---|---|
[Programmers] ๊ธฐ๋ฅ๊ณผ ๋ณด ์ค์น (Lv.3) 2024/4/1 (1) | 2024.04.01 |
[LeetCode] 641. design_circular_deque (Medium) 2023/5/11 (0) | 2023.05.11 |
[LeetCode] 622. design_circular_queue (Medium) 2023/5/10 (0) | 2023.05.10 |
[LeetCode] 232. implement_queue_using_stacks (Easy) 2023/5/10 (0) | 2023.05.10 |