[프로그래머스/python] 프렌즈4블록
2022. 8. 15. 21:50ㆍ알고리즘/프로그래머스
반응형
프렌즈4블록
2018 KAKAO BLIND RECRUITMENT
문제
풀이
- 블럭 터뜨리기
- 모든 블럭을 돌아가면서 주변 3개의 블럭이 같은지 체크를 진행합니다.
- 체크된 블럭의 경우 집합에 추가를 하고 모든 블럭을 다 돌면 집합의 블럭의 좌표를
'b'
로 만듭니다.
- 블럭 떨어뜨리기
- 블럭의 세로 순환을 돌며 밑에서부터 체크를 합니다.
- 블럭의 밑에서 부터 올라가면서
'b'
를 만나게 된다면 그 위에 블럭과 교체를 진행합니다.
- 위 과정을 반복
- 터뜨릴 좌표가 저장된 집합에 아무것도 없다면 마칩니다.
풀이코드
def solution(m, n, board):
answer = 0
lis = []
dx =[1,1,0]
dy =[1,0,1]
for boar in board:
tmp = list(boar)
lis.append(tmp)
count = 0
while(True):
stack = set([])
for x in range(m):# 터뜨릴 블록 찾기
for y in range(n):
check = lis[x][y]
if check =='b':
continue
if 0<=x+1<m and 0<=y+1<n:
check_count=0
for i in range(3):
X = x+dx[i]
Y = y+dy[i]
if lis[X][Y]==check:
check_count+=1
else:
break
if check_count == 3:
stack.add((x,y))
stack.add((x+1,y))
stack.add((x,y+1))
stack.add((x+1,y+1))
if stack:# 터뜨릴 블록이 없다면 return
count+=len(stack)
pass
else:
break
for stac in list(stack): # 블록 터뜨리기
x,y = stac[0],stac[1]
lis[x][y] = 'b'
for y in range(n):# 블록 떨어뜨리기
tmp = []
for x in range(m):
if lis[x][y] =='b':
for i in range(x,0,-1):
lis[i][y] = lis[i-1][y]
lis[i-1][y] = 'b'
else:
continue
return count
가장 인기 많은 코드
def solution(m, n, board):
x = board
x2 =[]
for i in x:
x1 = []
for i2 in i:
x1.append(i2)
x2.append(x1)
point = 1
while point != 0:
list = []
point = 0
for i in range(m - 1):
for j in range(n - 1):
if x2[i][j] == x2[i][j + 1] == x2[i + 1][j] == x2[i + 1][j + 1] != '팡!':
list.append([i, j])
point += 1
for i2 in list:
i, j = i2[0], i2[1]
x2[i][j], x2[i][j + 1], x2[i + 1][j], x2[i + 1][j + 1] = '팡!', '팡!', '팡!', '팡!'
for i3 in range(m):
for i in range(m - 1):
for j in range(n):
if x2[i + 1][j] == '팡!':
x2[i + 1][j], x2[i][j] = x2[i][j], '팡!'
cnt = 0
for i in x2:
cnt += i.count('팡!')
return cnt
반응형
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스/python] 파일명 정렬 (0) | 2022.08.15 |
---|---|
[프로그래머스/python] 멀리 뛰기 (0) | 2022.08.15 |
[프로그래머스/python] 방문 길이 (0) | 2022.08.15 |
[프로그래머스/python] 후보키 (0) | 2022.08.10 |
[프로그래머스/python] 자물쇠와 열쇠 (0) | 2022.08.10 |