코테분석#8-2 Mooyo Mooyo (백준 16768번) 😱

정은경·2020년 4월 13일
0

알고리즘

목록 보기
24/125

1. 문제



2. 나의 풀이

3. 쌤's 풀이

  • flood fill을 기초지식으로 요구
  • flood fill 이후에 대한 처리
  • 2차원 배열 내부에서의 요소들을 어떻게 잘 이동시킬 수 있는 가
  • 이 문제를 안보고 잘 풀 수 있으면 삼성/카카오 dfs/bfs 문제 풀수 있다고함!
def new_array(N):
	return [False for i in range(10) for _ in range(N)]

N, K = map(int, input().split())
M = [list(input()) for _ in range(N)]
ck = new_array(N)
ck2 = new_array(N)

dx, dy = [0,1,0,-1],[1,0,-1,0]

def dfs(x,y):
	ck[x][y] = True # 그룹에 있는 가를 체크하는 ck배열
    M[x][y] = 0
	ret = 1
	for i in range(4):
    	xx, yy = x + dx[i], y + dy[i]
        if xx =< 0 or xx >= N or yy < 0 or yy >= 10:
        	continue
        if ck[xx][yy] or M[x][y] != M[xx][yy]:
        	continue
        ret += dfs(xx,yy)
    return ret

def dfs2(x,y, val):
	ck2[x][y] = True # 그룹에서 지워도 되는 가를 체크하는 ck배열
   	M[x][y] = '0'
	for i in range(4):
    	xx, yy = x + dx[i], y + dy[i]
        if xx =< 0 or xx >= N or yy < 0 or yy >= 10:
        	continue
        if ck[xx][yy] or M[xx][yy] != val:
        	continue
        dfs2(xx,yy,val)

def down():
	for i in range(10):
    	tmp = []
    	for j in range(N):
        	if M[j][i] != '0':
            	tmp.append(M[j][i])
		for j in range(N-len(tmp)):
        	M[j][i] = '0'
        for j in range(N-len(tmp), N):
        	M[j][i] = tmp[j - (M-len(tmp))]

while True:
	exist = False
    ck = new_array(N)
    for i in range(N):
    	for j in range(10):
        	if M[i][j] != '0' and not ck[i][j]:	
            	continue
            res = dfs(i,j) # 개수 세기
           	if res >= K:
            	dfs2(i,j) # 지우기
                exist = Trure
                
    if exist:
    	break
    down() # 내리기

for i in M:
	print(''.join(i))

4. Reference

5. 느낀 점

profile
#의식의흐름 #순간순간 #생각의스냅샷

0개의 댓글