Carnival7
Change Developer
Carnival7
전체 방문자
오늘
어제
  • 분류 전체보기
    • 자바의 정석
    • 프로그래밍 언어별 tools
      • 파이썬
      • 자바
    • 코딩 테스트
      • 백준 강의 기초편
      • 백준 강의 연습편
      • 백준 강의 문제편
      • 삼성 기출
      • 백준 - 일반
      • 카카오 기출
      • 프로그래머스 - 일반
      • 코테 풀이 Tools
    • CS
      • Network
      • 운영체제
      • 알고리즘
      • DB
    • Web_Backend
      • Spring
      • 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
      • 스프링 핵심 원리 - 기본편
    • DevOps
    • IT 업무 지식
      • 인프라
      • 클라우드
    • 자격증
      • AWS - CLF
      • 정처기 - 실기
    • 생각 정리

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • Github Actions
  • 스프링 #인터셉터 #AOP #필터
  • DevOps
  • 슬라이딩 윈도우 #덱
  • 삼성기출 #2023 #상반기
  • code deploy
  • 코딩테스트 #삼성기출 #구현 #시뮬레이션
  • 알고리즘 #백준강의기초편 #코딩테스트
  • 프로그래머스 #카카오기출 #레벨2
  • ci/cd
  • 스프링 #AOP
  • 스프링 부트 무중단 웹 서비스
  • DMZ
  • 슬라이딩 윈도우
  • nginx
  • 삼성기출 #백준강의문제편

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Carnival7

Change Developer

코딩 테스트/백준 강의 연습편

BFS) 6087.레이저 통신

2022. 6. 9. 17:33

https://www.acmicpc.net/problem/6087

 

6087번: 레이저 통신

크기가 1×1인 정사각형으로 나누어진 W×H 크기의 지도가 있다. 지도의 각 칸은 빈 칸이거나 벽이며, 두 칸은 'C'로 표시되어 있는 칸이다. 'C'로 표시되어 있는 두 칸을 레이저로 통신하기 위해서

www.acmicpc.net

# solution.
# BFS의 가중치를 직선의 개수로 설정한다.
# 즉, 시작점부터 해당점까지 도달하기 위해 필요한 직선의 개수를 dist 배열에 업데이트한다.
# 여기서 필요한 직선의 개수 -1 이 필요한 거울 개수의 최솟값이므로 dist 배열의 타겟 지점의 값에서 -1을 해주면 답을 구할 수 있다.
# 가중치가 다르므로, BFS 탐색을 할 때, 각 방향에서 벽을 만나거나 탐색 범위를 벗어나기 전까지의 모든 아직 탐색되지 않은 지점을 탐색하며 각 지점을 큐에 넣는다.

from collections import deque
m,n=map(int,input().split())

dx=[-1,1,0,0]
dy=[0,0,-1,1]

a=[input() for _ in range(n)]

sx,sy,ex,ey=-1,-1,-1,-1

for i in range(n):
    for j in range(m):
        if a[i][j]=='C':
            if sx==-1:
                sx,sy=i,j
            else:
                ex,ey=i,j

q=deque()
q.append((sx,sy))
dist=[[-1]*m for _ in range(n)]
dist[sx][sy]=0

while q:
    x,y=q.popleft()
    for k in range(4):
        nx,ny=x+dx[k],y+dy[k]
        while 0<=nx<n and 0<=ny<m:
            if a[nx][ny]=='*':
                break
            if dist[nx][ny]==-1:
                dist[nx][ny]=dist[x][y]+1
                q.append((nx,ny))
            nx+=dx[k]
            ny+=dy[k]

print(dist[ex][ey]-1)

'코딩 테스트 > 백준 강의 연습편' 카테고리의 다른 글

BFS) 10026.적록색약  (0) 2022.06.10
BFS) 1963. 소수 경로  (0) 2022.06.10
시뮬레이션과 구현) 16974.레벨 햄버거  (0) 2022.06.09
브루트포스) 16198.에너지 모으기  (0) 2022.06.07
브루트포스) 16197.두 동전  (0) 2022.06.07
    '코딩 테스트/백준 강의 연습편' 카테고리의 다른 글
    • BFS) 10026.적록색약
    • BFS) 1963. 소수 경로
    • 시뮬레이션과 구현) 16974.레벨 햄버거
    • 브루트포스) 16198.에너지 모으기
    Carnival7
    Carnival7

    티스토리툴바