Notice
Recent Posts
Recent Comments
Link
나의 개발일지
[프로그래머스] Lv.2 [1차] 프렌즈4블록 [Python, 파이썬] KAKAO 본문
- 문제 : https://school.programmers.co.kr/learn/courses/30/lessons/17679
- 🔑 좌표 얻고, 터뜨리고, 내리기를 터뜨릴 게 없을 때까지 반복하면 되는 문제
- 4개가 모였다고 바로 터뜨리면 안 되고 모여있는 애들을 한 번에 터뜨려야 한다.
- 내리기는 제일 마지막 행부터 올라오면서 빈 공간이면 같은 열 위쪽에 처음 만나는 애와 자리 바꾼다.
- 터뜨릴 수 있는 좌표가 없으면 끝
- answer은 마지막에 board를 다시 돌면서 빈 공간의 개수를 세도 되지만 바로바로 더해줬다.
def solution(m, n, board):
answer = 0
for i in range(m): # 2차원 리스트로 변환
board[i] = list(board[i])
def getCoord(): # 4개 모여있는 좌표 얻기
for i in range(m-1):
for j in range(n-1):
if board[i][j] != "" and board[i][j] == board[i][j+1] == board[i+1][j] == board[i+1][j+1]:
coord.append((i, j))
coord.append((i, j+1))
coord.append((i+1, j))
coord.append((i+1, j+1))
return coord
def explosion(coord): # 터뜨리기
for i in coord:
x, y = i
board[x][y] = ""
def down(): # 내리기
for i in range(m-1, 0, -1): # 제일 마지막 행 부터 올라가면서 확인
for j in range(n):
if board[i][j] == "": # 빈 공간이면
for k in range(i-1, -1, -1): # 같은 열 위쪽을 확인
if board[k][j] != "": # 문자가 있으면 내림
board[i][j] = board[k][j]
board[k][j] = ""
break
while True:
coord = [] # 4개 모인 좌표 저장
if not getCoord(): # 터뜨릴 수 있는 좌표가 없으면 끝
break
answer += len(set(coord)) # 중복되는 좌표 없애고 길이 더함
explosion(set(coord))
down()
return answer
'프로그래머스' 카테고리의 다른 글
[프로그래머스] Lv.1 신규 아이디 추천 [Python, 파이썬] KAKAO (0) | 2023.10.06 |
---|---|
[프로그래머스] Lv.1 크레인 인형뽑기 게임 [Python, 파이썬] KAKAO (1) | 2023.10.05 |
[프로그래머스] Lv.2 [3차] 파일명 정렬 [Python, 파이썬] KAKAO (1) | 2023.10.04 |
[프로그래머스] Lv.2 오픈채팅방 [Python, 파이썬] KAKAO (0) | 2023.10.04 |
[프로그래머스] Lv.2 [3차] n진수 게임 [Python, 파이썬] KAKAO (0) | 2023.09.27 |
Comments