Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- GIT
- 최소 신장 트리
- 플로이드 와샬
- 백트래킹
- 투 포인터
- 백준
- 2021 KAKAO BLIND RECRUITMENT
- 다익스트라
- Spring
- 2019 KAKAO BLIND RECRUITMENT
- 2020 KAKAO BLIND RECRUITMENT
- 시뮬레이션
- 브루트포스
- 2018 KAKAO BLIND RECRUITMENT
- 비트마스킹
- 프로그래머스
- SWEA
- 로봇 청소기
- 플로이드와샬
- 스택
- BFS
- 크루스칼
- 파이썬
- 우선순위큐
- 구현
- 2020 카카오 인턴십
- 이분탐색
- 조합
- 트라이
- 투포인터
Archives
- Today
- Total
개발조아
[SWEA] 1249 [S/W 문제해결 응용] 4일차 - 보급로 파이썬 본문
728x90
문제 링크 : https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV15QRX6APsCFAYD
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
시작점에서 출발하여 가중치인 복구 시간을 가장 적게 하면서 도착지로 이동하는 문제이다.
우선순위 큐를 사용하여 BFS로 구현했다.
우선순위 큐는 heapq 패키지로 사용하여 복구시간을 최우선기준으로 잡고 했다.
import heapq
dx = [-1,1,0,0]
dy = [0,0,-1,1]
tc = int(input())
visited = [[0]*100 for _ in range(100)]
visited_num = 0
def solv(t):
global n,board
n = int(input())
board = [list(map(int, input())) for _ in range(n)]
print('#%d %d'%(t,bfs()))
def bfs():
global visited
visited[0][0] = visited_num
pq = []
heapq.heappush(pq,(0,0,0))
while pq:
cnt,x,y = heapq.heappop(pq)
x *= -1
y *= -1
if x == n-1 and y == n-1:
return cnt
for d in range(4):
nx = x + dx[d]
ny = y + dy[d]
if point_validator(nx,ny):
visited[nx][ny] = visited_num
heapq.heappush(pq,(cnt+board[nx][ny],-nx,-ny))
def point_validator(x,y):
if x < 0 or y < 0 or x >= n or y >= n:
return False
elif visited[x][y] == visited_num:
return False
return True
for t in range(1,tc+1):
visited_num += 1
solv(t)
'알고리즘 > SWEA' 카테고리의 다른 글
[SWEA] 3752 가능한 시험 점수 파이썬 (0) | 2021.08.11 |
---|---|
[SWEA] 2819 격자판의 숫자 이어 붙이기 파이썬 (0) | 2021.08.11 |
[SWEA] 1226 [S/W 문제해결 기본] 7일차 - 미로1 파이썬 (0) | 2021.08.11 |
[SWEA] 1210 [S/W 문제해결 기본] 2일차 - Ladder1 파이썬 (0) | 2021.08.11 |
[SWEA] 4112 이상한 피라미드 탐험 파이썬 (0) | 2021.08.10 |
Comments