일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 블록체인
- next.js
- 솔리디티
- 이더리움
- 파이썬
- es6
- 이슈
- HTML
- 쿠버네티스
- CSS
- react
- 가상화
- k8s
- JavaScript
- 백엔드
- BFS
- 백준
- kubernetes
- VUE
- 프론트엔드
- AWS
- 리액트
- 웹
- 클라우드
- TypeScript
- 자바스크립트
- 알고리즘
- 컴퓨터공학
- docker
- 타입스크립트
Archives
- Today
- Total
즐겁게, 코드
백준 16469번 : 소년 점프 본문
BFS에 약간의 잡기술을 얹은 문제입니다.
풀이가 복잡하지는 않은데, 이걸 설명하려 하니 뭔가 복잡해질 것 같아 적당히 "이렇게 푼 사람도 있구나" 하시고 봐주셔도 될 것 같습니다.
[정답 코드 - Python]
import sys
from collections import deque
input = sys.stdin.readline
R, C = map(int, input().split())
visitedA = [[-1] * C for _ in range(R)]
visitedB = [[-1] * C for _ in range(R)]
visitedC = [[-1] * C for _ in range(R)]
dy = [1, 0, -1, 0]
dx = [0, 1, 0, -1]
minRoute = 1e9
minCount = 0
board = []
for _ in range(R):
board.append(list(input()))
Ay, Ax = map(int, input().split())
By, Bx = map(int, input().split())
Cy, Cx = map(int, input().split())
def bfs(startNode, villianType):
q = deque()
y, x = startNode
if villianType == 'A':
visitedA[y - 1][x - 1] = 0
elif villianType == 'B':
visitedB[y-1][x-1] = 0
elif villianType == 'C':
visitedC[y-1][x-1] = 0
q.append((y - 1, x - 1))
while q:
y, x = q.popleft()
for i in range(4):
ny = y + dy[i]
nx = x + dx[i]
if 0 <= ny < R and 0 <= nx < C:
if villianType == 'A':
if visitedA[ny][nx] == -1 and board[ny][nx] == '0':
q.append((ny, nx))
visitedA[ny][nx] = visitedA[y][x] + 1
elif villianType == 'B':
if visitedB[ny][nx] == -1 and board[ny][nx] == '0':
q.append((ny, nx))
visitedB[ny][nx] = visitedB[y][x] + 1
elif villianType == 'C':
if visitedC[ny][nx] == -1 and board[ny][nx] == '0':
q.append((ny, nx))
visitedC[ny][nx] = visitedC[y][x] + 1
bfs((Ay, Ax), 'A')
bfs((By, Bx), 'B')
bfs((Cy, Cx), 'C')
for row in range(R):
for col in range(C):
if visitedA[row][col] > -1 and visitedB[row][col] > -1 and visitedC[row][col] > -1:
temp = max(visitedA[row][col],
visitedB[row][col], visitedC[row][col])
if minRoute > temp:
minRoute = temp
minCount = 1
elif minRoute == temp:
minCount += 1
if minCount != 0:
print(minRoute)
print(minCount)
else:
print(-1)
반응형
'💯 알고리즘 > 백준 온라인 저지' 카테고리의 다른 글
백준 2992번 : 크면서 작은 수 (2) | 2021.10.20 |
---|---|
백준 1417번 : 국회의원 선거 (0) | 2021.09.22 |
파이썬에서 우선순위 큐 사용하기 (0) | 2021.09.21 |
백준 1182번 : 부분수열의 합 (1) | 2021.09.12 |
백준 6603번 : 로또 (0) | 2021.09.04 |
Comments
소소한 팁 : 광고를 눌러주시면, 제가 뮤지컬을 마음껏 보러다닐 수 있어요!
와!! 바로 눌러야겠네요! 😆