40분 걸려서 풀었는데.. 18%인가에서 '틀렸습니다.' .. 😥😥
확실히 시뮬레이션 유형, 그니까 코드 구현력이 약하다..
많이 풀면서 속도와 정확도 올리는 것에 관심 가져야겠다.
1차 제출. 실패 코드. 풀이시간 40분
import sys
input = sys.stdin.readline
from collections import deque
dx = [-1, 0, 1, 0]
dy = [0, 1, 0, -1]
def bfs(a, b, field):
visited = [[False]*6 for _ in range(12)]
q = deque([(a, b)])
visited[a][b] = True
puyos = []
while q:
x, y = q.popleft()
puyos.append((x, y))
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if 0 <= nx < 12 and 0 <= ny < 6 and field[a][b] == field[nx][ny] and not visited[nx][ny]:
visited[nx][ny] = True
q.append((nx, ny))
if len(puyos) >= 4:
return puyos
else:
return None
def pop(puyos, field):
for puyo in puyos:
x, y = puyo
field[x][y] = '.'
for j in range(6):
for i in range(11, -1, -1):
if field[i][j] == '.':
ni = i - 1
while 0 <= ni:
if field[ni][j] != '.':
field[i][j] = field[ni][j]
field[ni][j] = '.'
break
ni -= 1
return field
def play(field):
global puyo_count
visited = [[False] * 6 for _ in range(12)]
for i in range(11, -1, -1):
for j in range(6):
if field[i][j] != '.' and not visited[i][j]:
puyos = bfs(i, j, field)
if puyos:
field = pop(puyos, field)
puyo_count += 1
field = [list(input().strip()) for _ in range(12)]
relay = 0
puyo_count = 0
play(field)
print(puyo_count)
어후.. 문제를 이해 못 해서 틀린거였다..
다시 고민하다가 이해하고 수정하는데 또 30분 소요.. 후!하!
그니까 뿌요그룹이 여러개가 터져도 시간당 counting이 되기 때문에 한 묶음으로 처리되는걸 이해 못했다.
import sys
input = sys.stdin.readline
from collections import deque
dx = [-1, 0, 1, 0]
dy = [0, 1, 0, -1]
def bfs(a, b, field):
visited = [[False]*6 for _ in range(12)]
q = deque([(a, b)])
visited[a][b] = True
puyos = []
while q:
x, y = q.popleft()
puyos.append((x, y))
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if 0 <= nx < 12 and 0 <= ny < 6 and field[a][b] == field[nx][ny] and not visited[nx][ny]:
visited[nx][ny] = True
q.append((nx, ny))
if len(puyos) >= 4:
return puyos
else:
return None
def pop(puyosList, field):
for puyos in puyosList:
for puyo in puyos:
x, y = puyo
field[x][y] = '.'
for j in range(6):
for i in range(11, -1, -1):
if field[i][j] == '.':
ni = i - 1
while 0 <= ni:
if field[ni][j] != '.':
field[i][j] = field[ni][j]
field[ni][j] = '.'
break
ni -= 1
return field
def play(field):
popPuyos = []
for i in range(11, -1, -1):
for j in range(6):
if field[i][j] != '.':
puyos = bfs(i, j, field)
if puyos:
popPuyos.append(puyos)
if popPuyos:
field = pop(popPuyos, field)
return [True, field]
else:
return[False, field]
field = [list(input().strip()) for _ in range(12)]
puyo_count = 0
isPop, field = play(field)
while isPop:
puyo_count += 1
isPop, field = play(field)
print(puyo_count)
그래도 혼자 힘으로 골드4 풀어낸다는 것에 작은 만족감을 느꼈다.
많이 성장했다 진짜..
대신 속도와 정확성 계속 연습하기 !!
'CodingTest > Baekjun Online Judge' 카테고리의 다른 글
[ BOJ / 파이썬 ] 2573. 빙산 (0) | 2023.02.18 |
---|---|
[ BOJ / 파이썬 ] 9466. 텀 프로젝트 (0) | 2023.02.17 |
[ BOJ / 파이썬 ] 6603. 로또 (0) | 2023.02.13 |
[ BOJ / 파이썬 ] 6593. 상범빌딩 (0) | 2023.02.13 |
[ BOJ / 파이썬 ] 14501.퇴사 (0) | 2023.02.06 |