황찌옹
정리왕옹옹
황찌옹
GitHub Contribution
Loading data ...
  • 분류 전체보기 (158)
    • [ 알고리즘 ] (96)
      • Implementation (24)
      • Brute Force (6)
      • String (4)
      • Greedy (14)
      • DFS, BFS (13)
      • Back Tracking (4)
      • Sort & Binary Search (6)
      • DP (8)
      • Shortest Path (5)
      • Hash (3)
      • Stack, Queue (4)
      • Heap (1)
      • Tree (1)
      • Mathematics (1)
      • Ad-Hoc (1)
      • 기타 (COS Pro, etc) (1)
    • [ 언어 및 문법 ] (23)
      • Python (5)
      • C, C++ (13)
      • SQL (1)
      • 공통 개념(CS) (4)
    • [ Error ] (21)
      • Radiomics Feature Extraction (6)
      • CT Skin Segmentation (12)
      • etc (3)
    • [ Git ] (7)
    • [ 환경 설정 및 기타] (6)
    • [ 공부 ] (2)
      • AI, ML (0)
      • Computer Vision (0)
      • Image Processing (1)
      • QT (0)
      • AWS (1)
      • 의료 (0)
    • [ 포트폴리오 ] (1)
      • 🙋‍♀️자기 소개🙋‍♀️ (1)
      • 프로젝트 (0)
      • 공모전 (0)
      • 자격증 (0)
      • 대내외활동 (0)
      • 논문 (0)
      • 교육 봉사 (0)
    • [ 취준 ] (2)
      • 채용 설명회, 직무 상담 (1)
      • 취준 후기 (1)

블로그 메뉴

  • ❤️깃허브❤️

인기 글

태그

  • Python
  • config
  • Cloud
  • SQL
  • Visual Studio
  • aws
  • keras
  • OpenCV
  • Anaconda
  • QT
  • configuration
  • 씹어먹는C++
  • pyplot
  • git
  • cos pro
  • 모두의코드
  • c++
  • cs
  • tensorflow
  • numpy

최근 댓글

최근 글

전체 방문자
오늘
어제
hELLO · Designed By 정상우.
황찌옹

정리왕옹옹

[프로그래머스] 게임 맵 최단거리
[ 알고리즘 ]/DFS, BFS

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

2022. 9. 3. 04:18

 

📌문제

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

 

🎖️난이도

Level 2

 

✔️풀이

from collections import deque

def solution(maps):
    dx = [0, 0, 1, -1] # 동서남북
    dy = [1, -1, 0, 0]
    
    #visited = [[0]*len(maps[0])]*len(maps) # error!!! (얕은 복사)
    visited = [[0]*len(maps[0]) for _ in range(len(maps))] # 최단거리 누적
    queue = deque([[0, 0]])
    visited[0][0] = 1
    
    # bfs
    while queue:
        x, y = queue.popleft()
        for i in range(4):
            nx, ny = x+dx[i], y+dy[i]
            if 0 <= nx < len(maps) and 0 <= ny < len(maps[0]):
                if visited[nx][ny] == 0 and maps[nx][ny] == 1:
                    queue.append([nx, ny])
                    visited[nx][ny] += visited[x][y] + 1
                    
    answer = -1 if visited[-1][-1] == 0 else visited[-1][-1] # 3항 연산자
    
    return answer

 

🧠노트

최단거리(최단경로) & 모두 같은 거리(가중치) => BFS!

 

이 문제는 그냥 BFS의 기초였는데

맨 처음에 최단거리를 이동하면서 누적해가는 visited 2차원 배열 초기화를 잘못해서(얕은복사로ㅠ)

계속 왜 틀렸는지 모르고 애먹었다..

 

파이썬에서 2차원 리스트 초기화 시에는 리스트 내포와 for문을 이용하자!

 

🔍참고

[ 얕은 복사 vs 깊은 복사 ]

 

[Python] 얕은 복사🥵 vs 깊은 복사🤗

💡 2차원 배열 초기화 할 때 주의! ( * 연산자 vs for문 이용) [얕은 복사 & 깊은 복사] 얕은 복사(shallow copy)  실제 객체 전체를 복사한 것이 아닌, 메모리 주소(참조)만 복사한 것! 즉, 실제로는 연결

jiwon-hwang.tistory.com

 

[ 3항 연산자 ]

 

[Python] 삼항 연산자 (3항 연산자)

[3항 연산자] C/C++에서 x = [조건]? a : b; 와 같이 사용하던 3항 연산자를 Python에서는 다음과 같이 사용하면 된다! # ex1 x = a if [조건] else b # True일 때의 값을 먼저 대입 후 if~else # ex2 [a, b] = [b..

jiwon-hwang.tistory.com

 

 

저작자표시 (새창열림)

'[ 알고리즘 ] > DFS, BFS' 카테고리의 다른 글

[프로그래머스] 단어 변환  (0) 2022.09.09
[프로그래머스] 네트워크  (0) 2022.09.09
[개념 정리] DFS, BFS  (0) 2022.07.12
[프로그래머스] 여행경로  (2) 2022.07.03
[백준] 2178. 미로 탐색  (0) 2022.06.30
    황찌옹
    황찌옹
    다 정리해버리꺼야

    티스토리툴바