[Python] 13460번. 구슬 탈출 2

2026. 1. 2. 01:18·coding test/Baekjoon

문제 링크

성능 요약

메모리: 35176 KB, 시간: 60 ms

분류

구현, 그래프 이론, 그래프 탐색, 시뮬레이션, 너비 우선 탐색

 

from collections import deque

dir=((-1,0),(1,0),(0,-1),(0,1))

#1.입력
N,M=map(int,input().split())
matrix=[list(input()) for _ in range(N)]

#2.자료형 정의
#빨간,파란 구슬 각각의 위치를 생각해야하므로 visited는 4차원이여야함
visited=[[[[False]*M for _ in range(N)]
          for _ in range(M)]
          for _ in range(N)]
#빨간구슬,파란구슬 위치 저장
for y in range(N):
    for x in range(M):
        if matrix[y][x]=='R':
            ry,rx=y,x
        if matrix[y][x]=='B':
            by,bx=y,x
matrix[ry][rx]='.' #위치 저장했으니 이동할 수 있게 수정
matrix[by][bx]='.'

#3.동작 알고리즘
def move(y,x,dy,dx):
    dist=0 #움직인 거리
    while True:
        ny=y+dy
        nx=x+dx

        if matrix[ny][nx]=='#': #벽이라면
            break

        y=ny
        x=nx
        dist+=1

        if matrix[y][x]=='O': #구멍이라면
            break

    return y,x,dist,matrix[y][x]=='O' #구멍에 빠지면 True

def bfs(ry,rx,by,bx):
    queue=deque()
    queue.append((ry,rx,by,bx,0)) 
    visited[ry][rx][by][bx]=True

    while queue:
        ry,rx,by,bx,cnt=queue.popleft()

        #10번이 넘으면
        if cnt>=10:
            continue
        
        for dy,dx in dir:
            nry,nrx,rdist,rhole=move(ry,rx,dy,dx)
            nby,nbx,bdist,bhole=move(by,bx,dy,dx)

            if bhole: #파란공이 구멍에 빠지면
                continue

            if rhole: #빨간공이 구멍에 빠지면
                return cnt+1

            #만약 두 공이 같은 위치라면
            if nry==nby and nrx==nbx:
                if rdist>bdist: #더 먼거리가 더 뒤에서 시작함
                    nry-=dy
                    nrx-=dx
                else:
                    nby-=dy
                    nbx-=dx
            
            if not visited[nry][nrx][nby][nbx]:
                visited[nry][nrx][nby][nbx]=True
                queue.append((nry,nrx,nby,nbx,cnt+1))

    return -1 

ans=bfs(ry,rx,by,bx)

#4.출력
print(ans)

 

 

문제를 잘못 이해해서 결국,,, 지피티와 함께 풀었다,,,

틀렸던 이유!!

>> 한 번 기울여지면 구슬이 쭉 간다! 

>> 같은 위치에 도착하면 먼저 온 구슬이 차지한다!

 

 

이제는 뭔가 문제를 읽으면 아예 못 풀지는 않고 어려운 문제라도 60% 정도는 푼다고 생각했는데 이번 문제를 풀고 얼마나 오만했는지 또 깨달았다. 이 문제조차 못 푸는데 삼성 코테는 어떻게 뚫고, 현대오토에버 코테는 어떻게 뚫을까,,,

작년에 코테에서 골드 정도는 가볍게 풀 정도의 실력을 만들었어야했는데 내가 너무 안일하게 지낸 1년이였다는걸 느꼈다.

상반기 시작까지 3개월 남짓 남았는데 매일 문제를 풀며 지금이라도 후회하지 않도록 열심히 해야겠다.

'coding test > Baekjoon' 카테고리의 다른 글

[Python] 14502번. 연구소  (0) 2026.01.09
[Python] 23796번. 2,147,483,648 게임  (1) 2026.01.06
[Python] 5430번. AC  (0) 2025.12.20
[Python] 11438번 LCA 2  (0) 2025.12.15
[Python] 3584번 가장 가까운 공통 조상  (0) 2025.12.13
'coding test/Baekjoon' 카테고리의 다른 글
  • [Python] 14502번. 연구소
  • [Python] 23796번. 2,147,483,648 게임
  • [Python] 5430번. AC
  • [Python] 11438번 LCA 2
wish404
wish404
자동 로그
  • wish404
    wish-log
    wish404
    • 홈
    • 태그
    • 방명록
    • github
    • 분류 전체보기 (75)
      • log (8)
        • 블로그 관리 (5)
        • 에러 모음 (2)
      • coding test (47)
        • Algorithm (4)
        • Baekjoon (34)
        • SW Expert Academy (6)
        • etc (3)
      • 프로그래밍 언어 (7)
        • JAVA (7)
      • 데이터 엔지니어링 (5)
        • Kafka (0)
        • Spark (4)
        • Airflow (1)
        • Elasticsearch (0)
      • 머신러닝&딥러닝 (3)
        • Kaggle 스터디 (3)
        • 논문 리뷰 (0)
        • MLOps (0)
      • 신입 개발자가 되기까지 (5)
        • 취준일기 (1)
        • SSAFY (2)
        • 프로젝트 (1)
        • CS 공부 (1)
  • 인기 글

  • 태그

    복습
    BFS
    dp
    복습해야지
    그리디 알고리즘
    벨만포드
    중위순회
    최단 경로
    후위순회
    dfs
    싸피
    dijk
    다익스트라
    heapq
    SSAFY
    틀린문제
    전위순회
    Dijkstra
    그리디
    플로이드워샬
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
wish404
[Python] 13460번. 구슬 탈출 2
상단으로

티스토리툴바