[프로그래머스][Python] Lv2. 게임 맵 최단거리

2022. 4. 23. 10:50·Python/알고리즘 문제풀이

찾아라 프로그래밍 마에스터 문제

문제 풀러 바로가기 👇👇👇👇👇👇

https://programmers.co.kr/learn/courses/30/lessons/1844

 

코딩테스트 연습 - 게임 맵 최단거리

[[1,0,1,1,1],[1,0,1,0,1],[1,0,1,1,1],[1,1,1,0,1],[0,0,0,0,1]] 11 [[1,0,1,1,1],[1,0,1,0,1],[1,0,1,1,1],[1,1,1,0,0],[0,0,0,0,1]] -1

programmers.co.kr

 

 

문제내용은 위 링크 참고바람

 

 

문제풀이


위 문제는 BFS(너비 우선 탐색)을 이용하면 아주 쉽게 풀 수 있는 문제이다. queue(deque 라이브러리 사용)를 이용해 지도의 좌표를 저장하고 차례대로 좌표를 꺼내 퍼트려나가면 된다. 방향은 위, 아래, 왼쪽, 오른쪽 총 4가지로 현재좌표에 방향을 적용했을 때 그 값이 유효하다면 현재좌표+1 값을 방향을 적용한 좌표에 넣어 현재 몇 칸을 거쳐왔는지 표시해주면 된다. 마지막으로 유효한 좌표를 queue에 삽입해준다.

 

퍼져나가는 도중에 나아갈 방향의 좌표에 해당하는 값이 1보다 크다면 이미 방문한 좌표이기 때문에 continue를 통해 무시해주면 된다. (이 논리를 적용해야 최단거리를 구할 수 있음)

 

마지막 리턴할 때 목표 좌표(n-1, m-1)를 리턴해주면 된다. 여기서 유의할 점은 목표지에 도달하지 못했을 때 -1을 리턴하는 것인데, 목표지의 값이 0이거나 1이면 도달하지 못한 것이므로 이 때 -1을 반환해주면 된다.

 

 

 

 

코드


def solution(maps):
    from collections import deque
    dx = [1, -1, 0, 0]
    dy = [0, 0, 1, -1]
    n = len(maps)
    m = len(maps[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 nx < 0 or ny < 0 or nx >= n or ny >= m:
                continue

            if maps[nx][ny] > 1 or maps[nx][ny] == 0:
                continue

            if nx == 0 and ny == 0:
                continue

            queue.append((nx, ny))
            maps[nx][ny] += maps[x][y]

    return maps[n-1][m-1] if maps[n-1][m-1] > 1 else -1

 

 

 

'Python/알고리즘 문제풀이' 카테고리의 다른 글
  • [프로그래머스][Python] Lv2. 메뉴 리뉴얼
  • [파이썬][백준] 2156번 포도주 시식
  • [백준][파이썬] 10816번 숫자 카드 2
  • [백준][파이썬] 18870번 좌표압축
gakko
gakko
좌충우돌 개발기
  • gakko
    MYVELOP 마이벨롭
    gakko
  • 전체
    오늘
    어제
    • 분류 전체보기 (203)
      • Spring (23)
        • Spring (10)
        • Spring Boot (7)
        • Spring Security (1)
        • Hibernate (4)
      • Test (3)
      • 끄적끄적 (6)
      • 활동 (35)
        • 부스트캠프 (23)
        • 동아리 (3)
        • 컨퍼런스 (3)
        • 글또 (5)
        • 오픈소스 컨트리뷰션 (1)
      • 디자인패턴 (0)
      • Git & GitHub (22)
        • Git (13)
        • Github Actions (1)
        • 오류해결 (5)
        • 기타(마크다운 등) (3)
      • 리눅스 (6)
        • 기초 (6)
        • 리눅스 서버 구축하기 (0)
      • Infra (2)
        • Docker (1)
        • Elastic Search (0)
        • Jenkins (1)
        • AWS (1)
      • MySQL (7)
        • 기초 (6)
        • Real MySQL (1)
      • 후기 (3)
        • Udemy 리뷰 (3)
      • CS (26)
        • 웹 기본지식 (0)
        • 자료구조 (13)
        • 운영체제 OS (12)
        • 데이터베이스 (1)
        • 시스템 프로그래밍 (0)
        • 기타 (0)
      • Tools (1)
        • 이클립스 (1)
        • IntelliJ (0)
      • 프로젝트 (1)
        • 모여모여(부스트캠프) (1)
      • JAVA (32)
        • Maven (6)
        • 오류해결 (11)
        • 자바 클래스&메소드 (1)
        • JSP & Servlet (12)
      • Javascript (5)
        • 기초 (3)
        • React (2)
      • Python (28)
        • 파이썬 함수 (9)
        • 알고리즘 문제풀이 (16)
        • 데이터 사이언스 (2)
        • 웹 크롤링 (1)
      • 단순정보전달글 저장소 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 우진님
  • 공지사항

  • 인기 글

  • 태그

    java
    파이썬
    GitHub
    Python
    MySQL
    스프링부트
    자바
    웹개발
    스프링
    부스트캠프 멤버십
    Git
    Spring
    운영체제
    오류해결
    os
    부스트캠프 7기
    알고리즘
    부스트캠프
    자바스크립트
    jsp
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.0
gakko
[프로그래머스][Python] Lv2. 게임 맵 최단거리
상단으로

티스토리툴바