잘 정리해보자

2018 카카오 블라인드 - 프렌즈4블록 본문

알고리즘/프로그래머스

2018 카카오 블라인드 - 프렌즈4블록

토마토오이 2021. 4. 13. 15:50
  1. (x,y), (x,y+1), (x+1,y), (x+1,y+1) 모두 다 같은 블럭인지 체크 (대문자로 변경해서 체크 -> 나중에 소문자로 변경해서)
  2. 같은 블럭인 경우, 그 자리 블록들을 소문자로 변경해서 사라질 블럭인것을 체크
  3. 모든 블럭 체크 후, 자신보다 아래 (y+1) 의 블럭이 소문자 또는 공백이면 데이터 교체 (교체 시, 공백으로 교체했음)
  4. 사라질 블럭이 없을때까지 반복 (블럭들이 전 후 같으면 반복종료)
  5. 사라진 블럭 개수 (공백) 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

 

Comments