개발자 톡
연습문제 톡
[HSAT 2회 정기 코딩 인증평가 기출] Garage game
Garage game 로직 문의..
- 등록일
- 2021-10-19 17:18:03
- 조회수
- 993
- 작성자
- dltjdtn321
아래처럼 단순 제거 후 내려가는 로직밖에 안 떠오르는데
블록의 색상이 모두 다른 경우에, N=8부터 시간 초과가 나네요
더 최적화할 부분이나
간단히라도 로직 힌트 부탁드립니다..!
import sys
def beatify(txt,ti):
print(txt,ti)
for y in range(len(arr[ti])-1,-1,-1):
print(arr[ti][y])
def cpy(ti,r_arr):
arr[ti]=[[0 for c in range(N)] for r in range((4-ti)*N)]
# arr[ti]=[[0 for c in range(N)] for r in range(3*N)]
visited[ti]=[[False for c in range(N)] for r in range(N)]
for x in range(N):
yc=0
for y in range((4-ti)*N):
if arr[ti-1][y][x]==0:
break
if not [y,x] in r_arr:
arr[ti][yc][x]=arr[ti-1][y][x]
yc+=1
def clk(y,x,ti,score):
xyXY=[x,y,x,y]
qu=[[y,x]]
visited[ti-1][y][x]=True
score+=1
r_arr=[[y,x]]
while qu:
cy,cx=qu.pop()
for di in [[-1,0],[0,1],[1,0],[0,-1]]:
ny=cy+di[0]
nx=cx+di[1]
if ny<0 or nx<0 or ny>=N or nx>=N:
continue
if visited[ti-1][ny][nx] or arr[ti-1][ny][nx]!=arr[ti-1][y][x]:
continue
qu.append([ny,nx])
visited[ti-1][ny][nx]=True
score+=1
r_arr.append([ny,nx])
if nxxyXY[2]:
xyXY[2]=nx
if ny>xyXY[3]:
xyXY[3]=ny
return [score,xyXY,r_arr]
def dfs(score,ti):
global ans
for y in range(N):
for x in range(N):
if arr[ti-1][y][x]==0 or visited[ti-1][y][x]:
continue
score2,xyXY,r_arr=clk(y,x,ti,score)
score2+=(xyXY[2]-xyXY[0]+1)*(xyXY[3]-xyXY[1]+1)
if ans
#[hsat_2회_정기_코딩_인증평가_기출]_garage_game
#python
#garage_game