๋ฌธ์ ์ ๋ชฉ | ์ ๋ต๋ฅ | ๋์ด๋ |
๊ธฐ๋ฅ๊ณผ ๋ณด ์ค์น | 35% | Lv.3 |
ํ๋ก๊ทธ๋๋จธ์ค
์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์ ๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์ ๋ง์ถคํ ํ๋กํ์ ๋ฑ๋กํ๊ณ , ๋์ ๊ธฐ์ ๊ถํฉ์ด ์ ๋ง๋ ๊ธฐ์ ๋ค์ ๋งค์นญ ๋ฐ์ผ์ธ์.
programmers.co.kr
๋ฌธ์ ์์ฝ
๊ตฌ์กฐ๋ฌผ(๊ธฐ๋ฅ, ๋ณด) ์ค์น ์ญ์ ์ ๋ํ ๋ฐฐ์ด build_frame์ด ์ฃผ์ด์ง๋ค.
์กฐ๊ฑด 1) ๋ชจ๋ ๊ธฐ๋ฅ์ ๋ ์ ์ค์น๋๊ฑฐ๋, ๋ณด์ ํ์ชฝ ๋ ์์ ์๊ฑฐ๋, ๋ ๋ค๋ฅธ ๊ธฐ๋ฅ ์์ ์๋ค.
์กฐ๊ฑด 2) ๋ชจ๋ ๋ณด๋ ๋ ์์ ์์ง ์๊ณ , ํ์ชฝ ๋์ด ๊ธฐ๋ฅ ์์ ์๊ฑฐ๋, ์์ชฝ ๋์ด ๋ณด์ ์ฐ๊ฒฐ๋์ด ์์ด์ผ ํ๋ค.
๊ฐ ์ฝ์ , ์ญ์ ๋ง๋ค ์กฐ๊ฑด1) ์กฐ๊ฑด2)๋ฅผ ๋ง์กฑ์์ผ์ผ ํ๋ค(๋ง์กฑ์ํค์ง ์๋ ํ์์ ๋ํด์๋ ๋ฌด์ํ๊ณ ๋ค์ ํ์๋ฅผ ์งํ)
answer=๋ชจ๋ ๊ตฌ์กฐ๋ฌผ ๊ฒฐ๊ณผ : [[x, y, 0|1],...]]๋ก ๊ตฌ์ฑ๋์ด ์๊ณ ์ค๋ฆ์ฐจ์ ์ ๋ ฌ์ด์ด์ผ ํ๋ค.
ํ์ด
Step1. ํน์ ๊ธฐ๋ฅ์ด๋ ๋ณด๊ฐ ์กฐ๊ฑด1, ์กฐ๊ฑด2๋ฅผ ๋ง์กฑํ๋์ง ํ์ธ
- ํน์ ๊ธฐ๋ฅ์ด ์กฐ๊ฑด์ ๋ง์กฑํ๋์ง ํ์ธ
- ํน์ ๋ณด๊ฐ ์กฐ๊ฑด์ ๋ง์กฑํ๋์ง ํ์ธ
Step2. ์ฝ์ , ์ญ์ ์ ๋ํด ์ฐ์ฐ ์ํ์ด ๊ฐ๋ฅํ์ง ํ์ธ
- ์ฝ์ ์ ๊ฒฝ์ฐ ํด๋น x, y์ ๋ํด step1์ ์งํ
- ์ญ์ ์ ๊ฒฝ์ฐ ์ญ์ ํ ๋ค์ ์ํฅ์ ๋ฐ๋ ๋ชจ๋ ๊ธฐ๋ฅ, ๋ณด์ ๋ํด step1์ ์งํ
โปโป ์ฑ ์ ํ์ด๋ possibleํจ์๋ฅผ ์ด์ฉํด ์ฝ์ ์ญ์ ์ ๋ชจ๋ answer์ ๋ํด ๊ฐ๋ฅํ์ง ํ์ํ๋๋ฐ
ํด๋น ํ์ด์ ๊ฒฝ์ฐ ์ฝ์ , ์ญ์ ๊ฐ ์ผ์ด๋ ๋๋ง๋ค ํน์ ๊ธฐ๋ฅ, ํน์ ๋ณด์ ๋ํด is_build_okay์ธ์ง ํ๋จํ๊ฒ ํ์๋ค.
(์ฝ์ ์ ๊ฒฝ์ฐ 1๊ฐ, ์ญ์ ์ ๊ฒฝ์ฐ 6๊ฐ์ง์ ๊ธฐ๋ฅ์ด๋ ๋ณด์ ๋ํด ํ์)
์ฝ๋์ ๊ธธ์ด๋ ์ฆ๊ฐํ์ง๋ง, ์กฐ๊ธ ๋ ์๋ฐํ๊ฒ ์ฐ์ฐ์ ์งํํ๋๋ก ํ์๋ค.
def is_build_okay(x, y, type, answer):
if type==0: #๊ธฐ๋ฅ-> ๋ฐ๋ฅ์, ๋ณด์ ํ์ชฝ ๋ ๋ถ๋ถ ์, ๋ค๋ฅธ ๊ธฐ๋ฅ ์
if y==0 or [x-1, y, 1] in answer or [x, y, 1] in answer or [x, y-1, 0] in answer:
return True
else:
if y>0:
if [x, y-1, 0] in answer or [x+1, y-1, 0] in answer:
return True
if [x-1, y, 1] in answer and [x+1, y, 1] in answer:
return True
return False
def solution(n, build_frame):
answer=[]
for now in build_frame:
if now[3]==0: #์ญ์
all_okay=True
check_answer_xy=[]
check_answer_xy=[xy for xy in [[now[0]-1, now[1], 1], [now[0], now[1], 1], [now[0]-1, now[1]+1, 1], [now[0], now[1]+1, 1], [now[0]+1, now[1], 1]] if xy in answer]
check_answer_xy+=[xy for xy in [[now[0], now[1]-1, 0], [now[0], now[1], 0], [now[0], now[1]+1, 0], [now[0]+1, now[1]-1, 0],[now[0]+1, now[1], 0]] if xy in answer]
temp_answer=answer[:]
if now[2]==0:
temp_answer.remove([now[0], now[1], 0])
else:
temp_answer.remove([now[0], now[1], 1])
for xy in check_answer_xy:
all_okay=is_build_okay(xy[0], xy[1], xy[2], temp_answer)
if all_okay==False:
break
if all_okay==True:
if now[2]==0:
answer.remove([now[0], now[1], 0])
else:
answer.remove([now[0], now[1], 1])
else:
if now[2]==0: #๊ธฐ๋ฅ
if is_build_okay(now[0], now[1], 0, answer):#์ค์น
answer.append([now[0], now[1], 0])
else: #๋ณด ์กฐ๊ฑด
if is_build_okay(now[0], now[1], 1, answer):#์ค์น
answer.append([now[0], now[1], 1])
answer.sort()
return answer
'์๊ณ ๋ฆฌ์ฆ๐ฅ > ๋ฌธ์ ํ์ด (Python)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Programmers] ๊ดํธ ๋ณํ (Lv.2) 2024/4/5 (0) | 2024.04.06 |
---|---|
[Programmers] ๋ฌธ์์ด ์์ถ (Lv.2) 2024/4/2 (0) | 2024.04.02 |
[Programmers] ์๋ฌผ์ ์ ์ด์ (Lv.3) 2024/3/31 (0) | 2024.03.31 |
[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 |