잘 정리해보자
2018 카카오 블라인드 - 프렌즈4블록 본문
- (x,y), (x,y+1), (x+1,y), (x+1,y+1) 모두 다 같은 블럭인지 체크 (대문자로 변경해서 체크 -> 나중에 소문자로 변경해서)
- 같은 블럭인 경우, 그 자리 블록들을 소문자로 변경해서 사라질 블럭인것을 체크
- 모든 블럭 체크 후, 자신보다 아래 (y+1) 의 블럭이 소문자 또는 공백이면 데이터 교체 (교체 시, 공백으로 교체했음)
- 사라질 블럭이 없을때까지 반복 (블럭들이 전 후 같으면 반복종료)
- 사라진 블럭 개수 (공백) count 출력.
python
import copy
def cntLower(arr) :
cnt = 0
for k in arr :
cnt += k.count('')
return cnt
def changeDown(m,n,arr) :
for q in range(m) :
for i in range(m-1) :
for j in range(n) :
if arr[i+1][j].islower() or arr[i+1][j] == '' :
temp = arr[i][j]
arr[i][j] = ''
arr[i+1][j] = temp
continue
return arr
def solution(m, n, board):
board = [list(i) for i in board]
while True :
copyBoard = copy.deepcopy(board)
for i in range(m-1) :
for j in range(n-1) :
if board[i][j].upper() == board[i][j+1].upper() and board[i][j].upper() == board[i+1][j].upper() and board[i][j].upper() == board[i+1][j+1].upper() :
board[i][j] = board[i][j].lower()
board[i][j+1] = board[i][j+1].lower()
board[i+1][j] = board[i+1][j].lower()
board[i+1][j+1] = board[i+1][j+1].lower()
board = changeDown(m,n,board)
if board == copyBoard :
break
answer = cntLower(board)
return answer
m = 4
n = 5
board = ['CCBDE', 'AAADE', 'AAABF', 'CCBBF']
solution(m,n,board)
//실행결과 : 14
문제 : programmers.co.kr/learn/courses/30/lessons/17679
'알고리즘 > 프로그래머스' 카테고리의 다른 글
2018 카카오 블라인드 - 캐시 (0) | 2021.04.14 |
---|---|
2018 카카오 블라인드 - 비밀지도 (0) | 2021.04.14 |
2018 카카오 블라인드 - 다트 (0) | 2021.04.13 |
Hash level1 - 완주하지 못한 선수 (0) | 2021.04.12 |
정렬 level 1 - K번째 수 (0) | 2021.04.12 |
Comments