DevKim

[Python] 2018 KAKAO BLIND RECRUITMENT - 프렌즈 4 블록 본문

알고리즘 PS

[Python] 2018 KAKAO BLIND RECRUITMENT - 프렌즈 4 블록

on_doing 2021. 3. 8. 18:41
728x90

programmers.co.kr/learn/courses/30/lessons/17679

 

코딩테스트 연습 - [1차] 프렌즈4블록

프렌즈4블록 블라인드 공채를 통과한 신입 사원 라이언은 신규 게임 개발 업무를 맡게 되었다. 이번에 출시할 게임 제목은 "프렌즈4블록". 같은 모양의 카카오프렌즈 블록이 2×2 형태로 4개가 붙

programmers.co.kr

[ 알고리즘 ]

구현

 

[문제 접근]

처음에 row와 col을 뒤집는 과정이 이 문제의 핵심키라고 생각한다.

이 문제를 통해 zip을 사용하여 한줄로 row와 col을 뒤집는 코드를 배웠다. 집합 set을 이용하여 2*2의 겹치는 캐릭터들을 합쳐주며 중복은 없애주고, 중복되어 없어진 부분을 임의의 문자로 채워주었다. 더 이상의 삭제되는 프렌즈가 없을 때까지 반복

 

 

[코드]

def solution(m, n, board):
    answer = 0
    board=list(map(list,zip(*board))) # row와 col 뒤집기
    
    
    while True:
        delete=set()
        for i in range(1,n):
            for j in range(1,m):
                if board[i][j]==board[i-1][j-1]==board[i-1][j]==board[i][j-1]!='_':
                    delete |=set([(i,j),(i-1,j-1),(i-1,j),(i,j-1)])
        
        if len(delete)==0:
            return answer
        
        answer+=len(delete)
            
        # 삭제된 것 지워주기
        for x,y in delete:
            board[x][y]=0
        
        List=[]
        
        for i in range(n):
            List.append(['_']*board[i].count(0))
            
        
        for i in range(n):
            board[i]=List[i]+[data for data in board[i] if data!=0]
        
                
    return answer
728x90
Comments