[백준/python][구현] 8972번 - 미친 아두이노

2025. 5. 21. 20:58· Programming/Algorithm(Python)
목차
  1. 정답

오늘은 선 피드백(아직도 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]))

링크: https://www.acmicpc.net/problem/8972

'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
  1. 정답
'Programming/Algorithm(Python)' 카테고리의 다른 글
  • [코드트리/python] 고대 문명 유적 탐사(2024년 상반기 삼성기출)
  • [코드트리/python] 미지의 공간 탈출(2024년 하반기 삼성기출)
  • [삼성공채] Python 준비하기
  • [백준/python][백트래킹] 18429번 - 근손실
code_wizard
code_wizard
헛둘헛둘
code_wizard
코드의 신비: 컴퓨터 마법사의 일기
code_wizard
전체
오늘
어제
  • 분류 전체보기 (61)
    • 생각정리 (2)
    • Project (7)
      • Caston Design (5)
      • 상명대 축제 2023 "비상(飛上)" (1)
      • 취뽀Lab (1)
    • Solo Project (4)
      • 소셜로그인+JWT (4)
    • Back-end (4)
      • Spring (4)
      • Test (0)
    • DevOps (1)
      • Docker (1)
    • Tip💡 (2)
    • CS🖥️ (5)
      • Operating System (1)
      • Network (0)
      • OOP (4)
    • Programming (35)
      • Data Structure (3)
      • Algorithm(Python) (26)
      • Java (1)
      • Python (5)
    • DeepLearning (1)
    • sw마에스트로 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 경사하강법
  • 20115번
  • 오블완
  • jpa
  • 프로그래머스
  • SW마에스트로
  • java
  • 도커커맨드
  • 그리디알고리즘
  • 21966번
  • 티스토리챌린지
  • 오버라이딩
  • Docker
  • 캡스톤디자인
  • Baekjoon
  • 축제사이트
  • MSE
  • 오버로딩
  • SWEA
  • 백준
  • 리트코드
  • 문자열
  • BFS
  • super
  • 평균오차제곱
  • 구현

최근 댓글

최근 글

hELLO
code_wizard
[백준/python][구현] 8972번 - 미친 아두이노
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.