혜온의 이것저것

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

Algorithm/Programmers

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

혜온 :) 2022. 1. 7. 15:45

[문제 이해 및 풀이]

board의 문자열들을 문자 하나씩 나눠야 하나씩 수정할 수 있기 때문에 문자열들을 한글자씩 나눠주었다.

 

이 문제에서는 같은 과정이 계속 반복되기 때문에 while문 안에 코드를 넣어 풀어주었다.

 

for문을 돌면서 4블록이 만들어지는게 확인되면 check하기 위해서 만든 array배열에서 그 위치에 해당하는 값을 1로 바꾸어 주었다. for문을 다 돌면 array의 합을 계산하여 새롭게 4블록이 생긴 것이 있는지 확인해주었다.

이 때, 만약 새로운 4블록이 만들어지지 않았다면 더 이상 게임이 진행되지 않기 때문에 while문을 빠져나가도록 해주었다.

 

4블록이 만들어지면 그 블록을 지우고 빈 공간을 채워야 하다.

이번에는 거꾸로 for문을 돌면서 array의 값이 1이면 4블록에 해당하는 값이므로 위에 있는 블록으로 대체해준다.

이 때, 위에 있는 블록도 array의 값이 1이라면 없어진 불록이기 때문에 받아올 수 없다. 따라서 x를 비교하는 인덱스 값으로 설정하여서 array값이 1이 아닐 때까지 하나씩 감소기켜 주었다.

맨 윗칸에 있는 블록은 받아올 블록이 없기 때문에 0을 받도록 해주었다.


[나의 코드]

def solution(m,n,board):
    answer=0
    for i in range(len(board)):
        board[i]=list(board[i])
        
    while True:
        array=[[0]*n for i in range(m)]
        for i in range(m-1):
            for j in range(n-1):
                if board[i][j]!=0 and board[i][j]==board[i][j+1] and board[i][j]==board[i+1][j] and board[i][j]==board[i+1][j+1]:
                    array[i][j],array[i+1][j],array[i][j+1],array[i+1][j+1]=1,1,1,1
        cnt=0
        for i in range(m):
            cnt+=sum(array[i])
        answer+=cnt
        if cnt==0:
            break
        for i in range(m-1,-1,-1):
            for j in range(n):
                if array[i][j]==1:
                    x=i-1
                    while x>=0 and array[x][j]==1:
                        x-=1
                    if x<0:
                        board[i][j]=0
                    else:
                        board[i][j]=board[x][j]
                        array[x][j]=1
    return answer

문제출처 :https://programmers.co.kr/learn/courses/30/lessons/17679 

 

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

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

programmers.co.kr

 

Comments