장 준
씨포유
장 준
전체 방문자
오늘
어제
  • 분류 전체보기 (91)
    • 프로그래밍언어 (15)
      • c언어 (10)
      • 파이썬 (0)
      • 자바스크립트 (5)
    • PS (58)
      • 알고리즘 이론 (18)
      • 프로그래머스 (5)
      • 백준 (35)
    • CS (16)
      • 자료구조 (5)
      • 운영체제 (3)
      • 네트워크 (5)
      • 데이터베이스 (0)
      • 기초 지식 (3)
    • 브랜드 (1)

블로그 메뉴

  • 태그

인기 글

태그

  • codesandbox
  • 백준
  • 알고리즘
  • DFS
  • BFS
  • Priority Queue
  • python3
  • nodejs
  • pypy3
  • Network
  • recursion
  • C
  • 프로그래밍언어
  • CS
  • JS
  • Implementation
  • 코딩테스트
  • 기초 지식
  • bitmask
  • Stack
  • Visual Studio
  • 프로그래머스
  • 자바스크립트
  • Kruskal algorithm
  • JavaScript
  • 자료구조
  • DP
  • 씨포유
  • PS
  • 파이썬

최근 댓글

최근 글

hELLO · Designed By 정상우.
장 준

씨포유

[백준(BOJ)] #4485- 녹색 옷 입은 애가 젤다지? (파이썬, PyPy3)
PS/백준

[백준(BOJ)] #4485- 녹색 옷 입은 애가 젤다지? (파이썬, PyPy3)

2022. 11. 16. 10:13
728x90

문제

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

 

4485번: 녹색 옷 입은 애가 젤다지?

젤다의 전설 게임에서 화폐의 단위는 루피(rupee)다. 그런데 간혹 '도둑루피'라 불리는 검정색 루피도 존재하는데, 이걸 획득하면 오히려 소지한 루피가 감소하게 된다! 젤다의 전설 시리즈의 주

www.acmicpc.net

 


문제 풀이

다익스트라 알고리즘의 개념, BFS 알고리즘

2022.07.31 - [PS/알고리즘 이론] - [파이썬으로 배우는 알고리즘] 다익스트라(Dijkstra) 알고리즘

 

[파이썬으로 배우는 알고리즘] 다익스트라(Dijkstra) 알고리즘

다익스트라(Dijkstra) 알고리즘이란? 다익스트라(Dijkstra) 알고리즘은 최단 경로 알고리즘으로 그래프에서 특정한 노드에서 다른 모든 노드까지의 최단 경로를 구하는 알고리즘입니다. 그리디 알고

c4u-rdav.tistory.com

 

1) 인접한 상하좌우의 길의 좌표와 해당 길까지 잃는 소지금을 힙에 push (해당 길까지 잃는 소지금이 적을수록 우선순위가 높음)

2) 힙에서 pop을 하여 잃는 소지금이 제일 적은 길의 좌표를 얻음

3) 1) ~ 2) 과정을 N-1, N-1 좌표로 갈 때 까지 반복

 


구현

코드

import sys
import heapq as hq
input = sys.stdin.readline

if __name__ == "__main__":
    dx = [-1, 0, 1, 0]
    dy = [0, 1, 0, -1]
    index = 1

    while True:
        N = int(input())
        if N == 0:
            break
        a = [list(map(int, input().split())) for _ in range(N)]
        visited = [[False] * N for _ in range(N)]
        heap = list()
        visited[0][0] = True
        # 잃는 소지금이 적을 수록 우선 순위가 높음
        hq.heappush(heap, (a[0][0], 0, 0))
        while heap:
            cost, tx, ty = hq.heappop(heap)
            # 마지막 좌표에 도달하면 끝
            if tx == N-1 and ty == N-1:
                print("Problem %d: %d" % (index, cost))
                break
            for k in range(4):
                x = tx + dx[k]
                y = ty + dy[k]
                if 0 <= x < N and 0 <= y < N and not visited[x][y]:
                    visited[x][y] = True
                    hq.heappush(heap, (cost + a[x][y], x, y))
        index += 1

결과

 

728x90
반응형
저작자표시 (새창열림)

'PS > 백준' 카테고리의 다른 글

[백준(BOJ)] #17298- 오큰수 (파이썬, PyPy3)  (0) 2022.11.30
[백준(BOJ)] #1520- 내리막 길 (파이썬, Python3)  (0) 2022.11.16
[백준(BOJ)] #10026- 적록색약 (파이썬, Python3)  (0) 2022.11.15
[백준(BOJ)] #2014- 소수의 곱 (파이썬, PyPy3)  (0) 2022.11.12
[백준(BOJ)] #1507- 궁금한 민호 (파이썬, PyPy3)  (0) 2022.11.11
    'PS/백준' 카테고리의 다른 글
    • [백준(BOJ)] #17298- 오큰수 (파이썬, PyPy3)
    • [백준(BOJ)] #1520- 내리막 길 (파이썬, Python3)
    • [백준(BOJ)] #10026- 적록색약 (파이썬, Python3)
    • [백준(BOJ)] #2014- 소수의 곱 (파이썬, PyPy3)
    장 준
    장 준
    C4U(Computer For You)

    티스토리툴바