728x90
반응형
문제출처: https://school.programmers.co.kr/learn/courses/30/lessons/17679
풀이:
def solution(m, n, board):
for i in range(m):
board[i] = list(board[i])
count = 0
set_pop = set() # 공통으로 터지는 부분 방지
while True:
for x in range(m-1):
for y in range(n-1):
now = board[x][y]
if now == []:
continue
if board[x+1][y] == now and board[x][y+1] == now and board[x+1][y+1] == now: # 정사각형안에 캐릭터들 같을경우
set_pop.add((x,y)),set_pop.add((x+1,y)) # set 에 넣어줌
set_pop.add((x,y+1)),set_pop.add((x+1,y+1))
if set_pop: # 겹치는 캐릭터들 제거 / count 추가
count += len(set_pop)
for i,j in set_pop:
board[i][j] = []
set_pop = set()
else:
break
while True:
flag = False
for i in range(m-1):
for j in range(n):
if board[i][j] and board[i+1][j]==[]:
board[i+1][j] = board[i][j]
board[i][j] = []
flag = True
if flag:
break
return count
55 / 100
def solution(m, n, board):
for i in range(m):
board[i] = list(board[i])
count = 0
set_pop = set() # 공통으로 터지는 부분 방지
while True:
for x in range(m-1):
for y in range(n-1):
now = board[x][y]
if now == []:
continue
if board[x+1][y] == now and board[x][y+1] == now and board[x+1][y+1] == now: # 정사각형안에 캐릭터들 같을경우
set_pop.add((x,y)),set_pop.add((x+1,y)) # set 에 넣어줌
set_pop.add((x,y+1)),set_pop.add((x+1,y+1))
if set_pop: # 겹치는 캐릭터들 제거 / count 추가
count += len(set_pop)
for i,j in set_pop:
board[i][j] = []
set_pop = set()
else:
return count
while True:
flag = True
for i in range(m-1):
for j in range(n):
if board[i][j] and board[i+1][j]==[]:
board[i+1][j] = board[i][j]
board[i][j] = []
flag = False
if flag:
break
return count
100 / 100
set_pop() 을 해주므로 공통된 부분이 터질경우 두개로 카운트되지 않기위해서 set으로 선언
이중 포문으로 정사각형으로 터지는 것을 지정해서 set_pop 에 좌표로 넣어준다.
now = [] 일때 continue 를 해주지 않으면 무한 루프가 돈다.
if set_pop: # 겹치는 캐릭터들 제거 / count 추가
count += len(set_pop)
for i,j in set_pop:
board[i][j] = []
set_pop = set()
else:
return count
터진 부분을 빈 리스트로 바꾸고 set_pop 을 빈 set 으로 다시 선언 다음 while 문 돌때 다시 좌표가 들어가기 때문이다.
겹친 부분이 없으면 더이상 터질부분이 없으므로 종료해주면 된다.
while True:
flag = True
for i in range(m-1):
for j in range(n):
if board[i][j] and board[i+1][j]==[]:
board[i+1][j] = board[i][j]
board[i][j] = []
flag = False
if flag:
break
return count
압축하는 과정.
그 다음게 존재하면 아래꺼를 빈 리스트로 하고 그 다음거를 바꿔주면서 쭊쭊 진행한다.
반응형
댓글