Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 백준
- 따라하면서 배우는 C언어
- BFS
- 정수론
- web
- Math
- BOJ
- 종만북
- Cleancode
- C
- server
- 따라하며 배우는 C언어
- dfs
- 생활코딩
- php
- 인프런
- C언어
- String
- sorting
- graph
- 따배씨
- greedy
- DP
- Algospot
- Algorithm
- programmers
- Python
- BASIC
- JavaScript
- udemy
Archives
- Today
- Total
몽상실현개발주의
[프로그래머스] level2 / 프렌즈 4블록 / Python 파이썬 본문
[프로그래머스] level2 / 프렌즈 4블록 / Python 파이썬
https://programmers.co.kr/learn/courses/30/lessons/17679
풀이
주어진 조건과 과정을 수행하는 시뮬레이션 문제이다.
다음의 4가지 과정을 시행하여 문제를 해결하였다.
- 2× 2 형태로 4개가 붙어있는 블록을 찾는다.
- 찾은 블록들을 제거한다.
- 블록을 제거한 후, 위에 있는 블록을 아래로 떨어뜨려 빈 공간을 채운다.
- 더이상 블록이 제거되지 않으면, 지워진 블록의 개수를 세어준다.
# 입력된 board 를 2차원 배열로 변환
def makeBoard(m, board):
newBoard = []
for i in range(m):
newBoard.append(list(map(str, board[i])))
return newBoard
# 2 x 2 블록 탐색
def checkboard(m, n, board):
deleteList = []
for y in range(m-1):
for x in range(n-1):
if board[y][x] and board[y][x] == board[y][x+1] and board[y][x] == board[y+1][x] and board[y][x] == board[y+1][x+1]:
deleteList.extend([[y, x], [y, x+1], [y+1, x], [y+1, x+1]])
return deleteList
# 탐색된 2 x 2 블록을 제거 (0 으로 표기)
def deleteBlocks(board, deleteList):
for d in deleteList:
board[d[0]][d[1]] = 0
return board
# 제거된 블록의 상단의 블록을 떨어뜨리기
def setBoard(m, n, board):
for y in range(m-1, -1, -1):
for x in range(n):
if board[y][x]:
continue
nextY = y
while nextY > 0:
nextY -= 1
if board[nextY][x]:
board[nextY][x], board[y][x] = board[y][x], board[nextY][x]
break
return board
# 시뮬레이션 종료 후, 제거된 블록을 count
def countBoard(m, n, board):
cnt = 0
for y in range(m):
for x in range(n):
if not board[y][x]:
cnt += 1
return cnt
#
def solution(m, n, board):
board = makeBoard(m, board)
while True:
deleteList = checkboard(m, n, board)
if not deleteList:
break
board = setBoard(m, n, deleteBlocks(board, deleteList))
return countBoard(m, n, board)
'Algorithm PS > 프로그래머스' 카테고리의 다른 글
[프로그래머스] level1 / 없는 숫자 더하기 / Python 파이썬 (0) | 2021.11.16 |
---|---|
[프로그래머스] level1 / 약수의 개수와 덧셈 / Python 파이썬 (0) | 2021.11.16 |
[프로그래머스] level1 / 숫자 문자열과 영단어 / Python 파이썬 (0) | 2021.11.16 |
[프로그래머스] level2 / 거리두기 확인하기 / Python 파이썬 (0) | 2021.08.30 |
[프로그래머스] 후보키 / Python (0) | 2021.05.03 |
Comments