일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 프로그래머스
- 15686번
- 백준 알고리즘
- 스타트 택시
- SW Expert Academy
- SW ExpertAcademy
- 수식 최대화
- 19238번
- 키패드 누르기
- 감소하는 수
- 경주로 건설
- python
- 1038번
- 빛의 경로 사이클
- 보석 쇼핑
- 12865번
- 9095번
- HTML 기초
- 파이썬
- QueryDSL 기초
- 16234번
- 미세먼지 안녕!
- 거울 설치
- 어른 상어
- 베스트엘범
- 17144번
- 1789번
- 14499번
- 12869번
- 2020 카카오 인턴십
Archives
- Today
- Total
보물창고 블로그
SW Expert Academy 1249. [S/W 문제해결 응용] 4일차 - 보급로 본문
728x90
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
이 문제는 너비 우선 탐색(bfs)을 사용하여 해결하였다. collections모듈에서 deque를 사용하여 해결했다. queue에는 현재의 위치에서 동서남북을 탐색하여서 만약 거리가 줄어들었다면 queue에 다시 넣어서 탐색을 하도록 하였다. 나의 코딩은 다음과 같다.
from collections import deque
def solution(map1):
l=len(map1)
dx=[-1,0,1,0]
dy=[0,-1,0,1]
d=[[float('inf') for _ in range(l)] for _ in range(l)]
d[0][0]=int(map1[0][0])
queue=deque()
queue.append([0,0])
while queue:
x,y=queue.popleft()
for i in range(4):
nx=x+dx[i]
ny=y+dy[i]
if -1<nx<l and -1<ny<l and d[nx][ny]>d[x][y]+int(map1[nx][ny]):
d[nx][ny]=d[x][y]+int(map1[nx][ny])
queue.append([nx,ny])
return d[l-1][l-1]
t=int(input())
for test in range(1,t+1):
n=int(input())
map1=[]
for _ in range(n):
map1.append(input())
answer=solution(map1)
print('#{} {}'.format(test,answer))
'알고리즘 풀이 > SW Expert Academy' 카테고리의 다른 글
SW Expert Academy 1954. 달팽이 숫자 (0) | 2020.01.28 |
---|---|
SW Expert Academy 1210. [S/W 문제해결 기본] 2일차 - Ladder1 (0) | 2020.01.28 |
SW Expert Academy 1244. [S/W 문제해결 응용] 2일차 - 최대 상금 (0) | 2020.01.28 |
SW Expert Academy 1824. 혁진이의 프로그램 검증 (0) | 2020.01.28 |
SW Expert Academy 4130. [모의 SW 역량테스트] 특이한 자석 (0) | 2020.01.23 |
Comments