https://school.programmers.co.kr/learn/courses/30/lessons/17679
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
🐾 2022-10-21
문제를 보고 생각난 풀이 :
모든 영역을 돌면서 해당 블록을 기준으로 우,하,아래우측 대각선 블록이 동일한 블록을 찾는다.
모든 영역을 돌면서 찾은 다음에 모은 블럭들을 비었다는 표시를 해준다.
그 후 비었다는 표시를 이용해 위에서 아래로 값들을 내린다.
이것을 계속 반복하면서 동일한 블록이 없을 때까지 찾는다.
반복이 멈추면 다시 돌면서 빈 블록의 개수를 세서 반환하면 된다.
방법은 맞는 것같은데 위에서 아래로 내리는 방법을 잊어먹었다..
아마 백준 2048에서 비슷하게 한것같은데 생각이 안나네..?😈
정답 코드 :
def solution(m, n, board):
for i in range(m) : board[i] = list(board[i])
cnt = 0
rm = set()
while True :
for i in range(m-1) :
for j in range(n-1) :
t = board[i][j]
if t == [] : continue
if t == board[i][j+1] and t == board[i+1][j] and t == board[i+1][j+1] :
rm.add((i,j+1));rm.add((i+1,j))
rm.add((i+1,j+1));rm.add((i,j))
if rm :
cnt += len(rm)
for i,j in rm :
board[i][j] = []
rm = set()
else : return cnt
while True :
moved = 0
for i in range(m-1) :
for j in range(n) :
if board[i][j] and board[i+1][j] == [] :
board[i+1][j] = board[i][j]
board[i][j] = []
moved = 1
if moved == 0 : break
주의해야할 점은
1. board가 문자열의 일차원 배열으로 들어오기 때문에 이차원 배열으로 바꿔줘야한다.
2. set에 추가하는 건 리스트 형태는 안되고 튜플 형태로 해야한다.
3. 두 문장을 한줄에 하고 싶으면 중간에 ';'를 붙여줘야한다.
복습하면서 만든 코드 :
def solution(m, n, board):
ans = 0
for i in range(m) :
board[i] = list(board[i])
while True :
candi = set()
for i in range(m-1) :
for j in range(n-1) :
if board[i][j] == [] : continue
if board[i][j] == board[i][j+1] and board[i][j]==board[i+1][j] and board[i][j] == board[i+1][j+1] :
candi.add((i,j))
candi.add((i+1,j))
candi.add((i,j+1))
candi.add((i+1,j+1))
if not candi : return ans
ans += len(candi)
for i,j in candi :
board[i][j] = []
# 밑으로 내리기
while True :
ismove = False
for i in range(m-1) :
for j in range(n) :
if board[i+1][j]==[]and board[i][j] :
ismove = 1
board[i+1][j] = board[i][j]
board[i][j] = []
if not ismove : break
이 한줄을 추가 안해서 틀렸었다!!
if board[i][j] == [] : continue
참고 블로그 :
https://my-coding-notes.tistory.com/226
[프로그래머스 / 파이썬] 프렌즈4블록 (2018 KAKAO BLIND RECRUITMENT)
코딩테스트 연습 - [1차] 프렌즈4블록 프렌즈4블록 블라인드 공채를 통과한 신입 사원 라이언은 신규 게임 개발 업무를 맡게 되었다. 이번에 출시할 게임 제목은 "프렌즈4블록". 같은 모양의 카카
my-coding-notes.tistory.com
'알고리즘 > 프로그래머스문제풀이' 카테고리의 다른 글
[Python/프로그래머스][1차]캐시_구현 (0) | 2022.10.13 |
---|---|
[Python/프로그래머스]괄호 변환_구현 (0) | 2022.10.12 |
[Python/프로그래머스]두 큐 합 같게 만들기_[구현] (1) | 2022.10.12 |
[Python/프로그래머스]거리두기 확인하기_[BFS] (1) | 2022.10.08 |
[Python/프로그래머스]주차요금계산_[구현] (0) | 2022.10.06 |