TIL과 WIL

TIL. 문제풀이(2)

barryjung 2023. 6. 2. 21:07

[오늘 한일]

  • 알고리즘 문제풀이
  • 도커강의 수강

 

[오늘 배운점]

파이썬

<프렌즈 4블록 풀이>

오늘은 프로그래머스 문제중 프렌즈 4블록을 풀었는데,

내가 푼 풀이가 마음에 들어서 꼭 기록해두고 싶다.

 

새로 배웠다기 보다, 그동안 내가 알던걸 잘 활용해서 풀었다. (문제나 풀이에 대한 설명은 생략하겠다.)

def erasing(m, n, board):
    checklist = [[bool(board[y][x]==board[y][x+1]==board[y+1][x]==board[y+1][x+1]!=0) for x in range(m-1)] for y in range(n-1)]
    for y, row in enumerate(checklist):
        for x, check in enumerate(row):
            if check:
                board[y][x] = None
                board[y+1][x] = None
                board[y][x+1] = None
                board[y+1][x+1] = None
    return board

def makedown(m, n, board):
    for y in range(n):
        for x in range(m):
            if None in board[y]:
                board[y].pop(board[y].index(None))
                board[y].append(0)
    return board

def solution(m, n, board):
    board = [[board[y][x] for y in range(m)][::-1] for x in range(n)]
    answercount = 0
    
    while True:
        checkboard = erasing(m, n, board)
        addcount = sum([row.count(None) for row in checkboard])
        if addcount==0:
            break
        answercount+=addcount
        board = makedown(m, n, checkboard)

    return answercount

이중구조 리스트 컴프리헨션,

bool함수,

count연산,

pop연산 등이 주요하다.

 

방법 면에서도

여러 아이디어가 들어가있다.

 

나중에 보고, 이런식으로 코드를 작성했었음을 되짚어보고싶다.