오늘은 선 피드백(아직도 2차원 BFS에서 실수가 나오다니요!!😤)
1. command의 for com in command:를 할 때, c로 변수를 주면 (r,c)로 row,column 으로 받을 때 변수명 겹침
2. 한 방에 지워야하는 폭탄 같은 문제에서 각자 단일 처리하면 안됨, 끝나고 한 번에 처리해야함 (문제 핵심 부분 파악하기)
3. 2차원 한방에 제거 (아직도 어리버리) crazys = [[i,j] for i, j in crazys if [i,j] not in delete or 0]
정답
from sys import stdin
move = [(0,0),(1,-1),(1,0),(1,1),(0,-1),(0,0),(0,1),(-1,-1),(-1,0),(-1,1)]
r_line = stdin.readline
INF = float('inf')
r, c = map(int, r_line().split())
mat = [0]*r
for i in range(r):
mat[i] = list(r_line().rstrip())
command = list(map(int, r_line().rstrip()))
# 1) 아두이노 위치 찾기
crazys = []
x = y = 0
for i in range(r):
for j in range(c):
if mat[i][j] == 'R':
crazys.append([i,j])
elif mat[i][j] == 'I':
x,y = i,j
# 2) 움직이기
cnt = 0
flag = 0
for com in command:
cnt += 1
# 1) 종수 이동
if com != 5:
px = x + move[com][0]
py = y + move[com][1]
if 0<=px<r and 0<=py<c:
if mat[px][py] == 'R': # 미친 아두이노 만나면, 게임종료
flag = 1
break
else:
mat[px][py] = 'I'
mat[x][y] = '.'
x,y = px,py # 좌표 업데이트
# 2) 미친 아두이노 이동
die = 0
move_i = [] # 이동한 아두이노들
c_mat = [[0]*c for _ in range(r)] # 갯수를 체크하는 맵
for i in range(len(crazys)):
r2,s2 = crazys[i][0],crazys[i][1]
# 1) 가장 가까워 지는 방향 구하기
min_v = [0, INF] # 번호, 값
for idx, (dx, dy) in enumerate(move):
if 0<=(r2+dx)<r and 0<=(s2+dy)<c:
value = abs(x-(r2+dx)) + abs(y-(s2+dy))
if value < min_v[1]:
min_v = [idx, value]
# 2) 미친 아두이노 이동
px = r2 + move[min_v[0]][0]
py = s2 + move[min_v[0]][1]
if mat[px][py] == 'I': # 종수 만나면, 게임종료
die = 1
break
else:
mat[px][py] = 'R'
c_mat[px][py] += 1 # 갯수 증가
if c_mat[r2][s2] == 0: # 원래 구역 자리에 아무도 없다면
mat[r2][s2] = '.' # 원래 구역 제거
crazys[i][0],crazys[i][1] = px, py
if die == 1:
flag = 1
break
# 폭발 아두이노 제거
delete = []
for i in range(r):
for j in range(c):
if c_mat[i][j] > 1:
mat[i][j] = '.'
delete.append([i,j])
crazys = [[i,j] for i, j in crazys if [i,j] not in delete or 0]
if flag == 1:
print("kraj " + str(cnt))
else:
for i in range(r):
print(''.join(mat[i]))
'Programming > Algorithm(Python)' 카테고리의 다른 글
[코드트리/python] 고대 문명 유적 탐사(2024년 상반기 삼성기출) (0) | 2025.04.12 |
---|---|
[코드트리/python] 미지의 공간 탈출(2024년 하반기 삼성기출) (3) | 2025.04.11 |
[삼성공채] Python 준비하기 (0) | 2025.04.06 |
[백준/python][백트래킹] 18429번 - 근손실 (0) | 2025.01.23 |
[프로그래머스] 섬 연결하기 LV3[prim, union-find] (0) | 2024.02.16 |