새소식

Computer Science/코딩테스트 문제 풀이

[N시간만에 끝내는 Python 코딩테스트] 7편 : 2018 카카오 코딩테스트 6번 프렌즈4블록

  • -

https://school.programmers.co.kr/learn/courses/30/lessons/17679

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

https://www.youtube.com/watch?v=sSBs9l7p8XQ

 

 

 

강의에서 numpy같은 라이브러리를 적극 활용하는 것 보고 나도 그래야겠다는 생각이 많이 든다. 

이번 문제 역시 천천히 아는데로 풀면 나온다. 

 

import numpy as np 
def solution(m, n, board):
    
    s = [list(i) for i in board]
    s = np.array(s)

    while True:
        delete_loc = []             # 더 이상 지울 캐릭터가 없을 때까지 반복 

        # 조건에 맞아서 지워질 캐릭터 위치 저장 
        for i in range(m-1):
            for j in range(n-1):
                if s[i,j] == '_':
                    continue
                if np.all(s[i:i+2, j:j+2] == s[i,j]):
                    delete_loc.append([i,j])

        # 조건에 부합하지 않고 더이상 지울 캐릭터가 없으면 멈춤
        if not delete_loc:
            break
        else:
            # 지울 것들을 지워준다
            for i, j in delete_loc:                
                s[i:i+2, j:j+2] = '_'      

            # 지울꺼 지웠으니 지운것보다 위에 있는 것들을 아래로 내려야함 
            for _ in range(m):
                for j in range(n):
                    for i in range(1,m):
                        if s[i,j]=='_':
                            s[i,j], s[i-1,j] = s[i-1,j], '_'

    answer = 0
    for k in s.tolist():
        answer += k.count('_')
    
    return answer
    
    

m = 4
n = 5
board = ["CCBDE", "AAADE", "AAABF", "CCBBF"]
print(solution(m, n, board))
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.