개발자 톡

연습문제 톡 [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

이 카테고리의 톡 더보기