프로그래머스 코딩테스트 고득점 Kit의 문제입니다.
https://programmers.co.kr/learn/challenges?tab=algorithm_practice_kit
문제
https://programmers.co.kr/learn/courses/30/lessons/17679
내가 작성한 코드
def is_square(board, i, j, m, n):
return i+1 < m and j+1 < n and board[i][j] == board[i+1][j] == board[i][j+1] == board[i+1][j+1]
def make_x(board, to_x):
cnt = 0
idx = [(0,0), (1,0), (0,1), (1,1)]
for i, j in to_x:
for d in idx:
if board[i+d[0]][j+d[1]] != 'x':
board[i+d[0]][j+d[1]] = 'x'
cnt += 1
return cnt
def down(board, m, n):
for j in range(n):
stk = []
for i in range(m):
if board[i][j] != 'x':
stk.append(board[i][j])
for i in range(m-1, -1, -1):
if not stk:
board[i][j] = 'x'
else:
board[i][j] = stk.pop()
def solution(m, n, board):
answer = 0
board = list(map(list, board))
crnt = -1
while crnt != 0:
crnt = 0
to_x = []
for i in range(m):
for j in range(n):
if is_square(board, i, j, m, n):
to_x.append((i,j))
crnt = make_x(board, to_x)
answer += crnt
down(board, m, n)
return answer
- 좌표
- 현 위치에서 오른쪽/아래/대각선이 같은지 확인
- 스택
- 지워진 공백을 채우기 위해 스택 사용
다른 사람이 작성한 코드
None
기억해야할 것
- 코드가 조금 긴 것 같다
'코딩테스트' 카테고리의 다른 글
[프로그래머스][KAKAO_BLIND][2020] 블록 이동하기 (0) | 2021.09.01 |
---|---|
[프로그래머스][KAKAO_BLIND][2018] 캐시 (0) | 2021.09.01 |
[프로그래머스][KAKAO_BLIND][2021] 매출 하락 최소화 (0) | 2021.09.01 |
[프로그래머스][KAKAO_BLIND][2020] 외벽 점검 (0) | 2021.09.01 |
[프로그래머스][KAKAO_BLIND][2018] 뉴스 클러스터링 (0) | 2021.09.01 |