프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
코드
def remove_possible(x, y, board):
tmp = board[x][y]
if tmp == None: # 빈 칸
return None
for i in range(2):
for j in range(2):
# 지워질 수 없는 블록이라면 None을 리턴
if board[x+i][y+j] != tmp:
return None
# 지울 수 있는 블록들의 좌표를 리턴
return [(x,y),(x,y+1),(x+1,y),(x+1,y+1)]
def solution(m, n, board):
answer = 0
board = [[board[x][y] for y in range(n)] for x in range(m)]
while True:
rmv_block = set()
for x in range(m-1):
for y in range(n-1):
tmp = remove_possible(x,y,board)
if tmp != None:
rmv_block.update(tmp) # 지워질 블록의 좌표들 집합에 추가
# 이번에 지워진 블록이 없다면 while문 탈출
if not rmv_block:
break
# 지워진 블록의 개수 answer에 추가
answer += len(rmv_block)
# 블록 지우기
for x,y in rmv_block:
board[x][y] = None
# 위에 있는 블록들 떨어짐
while True:
drop = False
for x in range(m-2,-1,-1):
for y in range(n):
if board[x][y] and board[x+1][y] == None:
board[x+1][y] = board[x][y]
board[x][y] = None
drop = True
if not drop:
break
return answer
어떤 알고리즘이 필요한 것도 아닌 그냥 구현 문제였다. 이런 문제는 잘 풀기 위해서는 많이 풀어보는 것 밖에는 답이 없는 거 같다....
'문제풀이 > 기타' 카테고리의 다른 글
[Python/파이썬] 2018 KAKAO BLIND RECRUITMENT [3차] n진수 게임 (1) | 2022.12.27 |
---|---|
[Python/파이썬] 프로그래머스 프린터 (0) | 2022.12.22 |
[Python/파이썬] 2019 KAKAO BLIND RECRUITMENT 오픈채팅방 (0) | 2022.12.17 |
[Python/파이썬] 2018 KAKAO BLIND RECRUITMENT [3차] 압축 (0) | 2022.12.12 |
[Python/파이썬] 프로그래머스 n^2 배열 자르기 (1) | 2022.12.09 |
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
코드
def remove_possible(x, y, board): tmp = board[x][y] if tmp == None: # 빈 칸 return None for i in range(2): for j in range(2): # 지워질 수 없는 블록이라면 None을 리턴 if board[x+i][y+j] != tmp: return None # 지울 수 있는 블록들의 좌표를 리턴 return [(x,y),(x,y+1),(x+1,y),(x+1,y+1)] def solution(m, n, board): answer = 0 board = [[board[x][y] for y in range(n)] for x in range(m)] while True: rmv_block = set() for x in range(m-1): for y in range(n-1): tmp = remove_possible(x,y,board) if tmp != None: rmv_block.update(tmp) # 지워질 블록의 좌표들 집합에 추가 # 이번에 지워진 블록이 없다면 while문 탈출 if not rmv_block: break # 지워진 블록의 개수 answer에 추가 answer += len(rmv_block) # 블록 지우기 for x,y in rmv_block: board[x][y] = None # 위에 있는 블록들 떨어짐 while True: drop = False for x in range(m-2,-1,-1): for y in range(n): if board[x][y] and board[x+1][y] == None: board[x+1][y] = board[x][y] board[x][y] = None drop = True if not drop: break return answer
어떤 알고리즘이 필요한 것도 아닌 그냥 구현 문제였다. 이런 문제는 잘 풀기 위해서는 많이 풀어보는 것 밖에는 답이 없는 거 같다....
'문제풀이 > 기타' 카테고리의 다른 글
[Python/파이썬] 2018 KAKAO BLIND RECRUITMENT [3차] n진수 게임 (1) | 2022.12.27 |
---|---|
[Python/파이썬] 프로그래머스 프린터 (0) | 2022.12.22 |
[Python/파이썬] 2019 KAKAO BLIND RECRUITMENT 오픈채팅방 (0) | 2022.12.17 |
[Python/파이썬] 2018 KAKAO BLIND RECRUITMENT [3차] 압축 (0) | 2022.12.12 |
[Python/파이썬] 프로그래머스 n^2 배열 자르기 (1) | 2022.12.09 |