프로그래머스(C++) - 게임 맵 최단거리

2025. 9. 14. 12:40·C++ 프로그래머스/BFS , DFS

 

●문제

 

●입출력

 

문제해석 :갈수있는길 1 갈수없는길 0인 2차원배열이 주어졌을때 처음 좌상단 (0,0)에서 좌하단 목적지

까지 갈수있는 최단 거리값을 return

 

푼 방법 : BFS를 사용하여 최단루트 계산

#include<vector>
#include <queue>
#include <iostream>
using namespace std;

int solution(vector<vector<int> > maps)
{
	//0 -> 벽 / 1 -> 갈수있는길
	//start는 왼쪽상단 (1,1) 도착은 우측하단 (n,m) 도착할수없으면 -1 최소값 return
	//최단거리문제 -> bfs문제 (queue)

	//(x좌초, y좌표), 현재까지 이동한 걸음 수)
	queue < pair<pair<int, int>, int>> q;
	//visited이름의 2차원 배열 만들기 행 : maps.size() (행의갯수) , 열 : maps[0].size() (열의 갯수)
	vector<vector<bool>>visited(maps.size(), vector<bool>(maps[0].size(), false));

	//첫(0,0)은 반드시 방문한다
	visited[0][0] = true;

	//상하좌우 방향벡터 설정
	//									  상        하       좌       우
	vector<pair<int, int>>direction = { {0, -1}, {0, +1}, {-1, 0}, {1, 0} };
	
	//bfs 처음 시작점 (0,0)을 큐에 넣기 , 시작점 포함 총 이동 횟수 카운트 1
	q.push(make_pair(make_pair(0, 0), 1));

	while (!q.empty())
	{
		//FIFO구조반환 큐에서 꺼낸 한칸의 정보를 담는다
		pair<pair<int, int>, int> currentPos = q.front();
		q.pop();

		//.first -> 좌표 / .first.first -> x좌표/ .first.second -> y좌표 / .second -> 이동거리
		int x = currentPos.first.first;
		int y = currentPos.first.second;

		//걸음수 선언
		int step = currentPos.second;

		//direction방향으로 탐색
		for (pair<int, int> p : direction)
		{
			int nextX = x + p.first;
			int nextY = y + p.second;

			//범위안이고 방문하지않았으며 벽이 아닌 칸 이동 1이 이동가능 0이벽
			if(nextX >= 0 && nextX < maps[0].size()&& nextY >= 0 && nextY < maps.size()
				&&!visited[nextY][nextX] && maps[nextY][nextX] == 1)
			{
				//최소걸음수 즉 현재 위치 행과 열이 다음 위치가 마지막 목적지일때
				if (nextX == maps[0].size() - 1 && nextY == maps.size() - 1)
				{
					return step + 1;
				}

				visited[nextY][nextX] = true;
				q.push(make_pair(make_pair(nextX, nextY), step + 1));
			}
		}
	}
	//도착 못했을때 -1
	return -1;


}

 

레벨 : 2

점수 : 1

'C++ 프로그래머스 > BFS , DFS' 카테고리의 다른 글

프로그래머스(C++) - 여행경로  (0) 2025.10.05
프로그래머스(C++) - 단어 변환  (0) 2025.09.23
프로그래머스(C++) - 네트워크  (0) 2025.09.13
프로그래머스(C++) - 타겟 넘버  (0) 2025.09.13
Algorithm - BFS, DFS  (0) 2025.09.12
'C++ 프로그래머스/BFS , DFS' 카테고리의 다른 글
  • 프로그래머스(C++) - 여행경로
  • 프로그래머스(C++) - 단어 변환
  • 프로그래머스(C++) - 네트워크
  • 프로그래머스(C++) - 타겟 넘버
lucodev
lucodev
언리얼 포폴개발 일기
  • lucodev
    루코 개발테이블
    lucodev
  • 전체
    오늘
    어제
    • 분류 전체보기 (218) N
      • Unreal 프로젝트 다이어리 (115) N
        • 첫번째 프로젝트 (73)
        • 두번째 프로젝트 (42) N
      • Unreal 팁 (8)
      • Unreal 디버깅 (8)
      • C++ 프로그래머스 (52)
        • Stack,Queue (7)
        • Hash (4)
        • Heap (2)
        • Sort (5)
        • Exhaustive search (5)
        • Greedy (2)
        • BFS , DFS (7)
        • Graph (2)
        • Dynamic Programming (1)
        • C++ Math (2)
        • 기타 문제 (14)
      • C++ 백준 (4)
      • C++ 팁 (1)
      • 개인 코테 & 스타디 <비공개> (29)
        • 코드 개인보관함 (9)
        • 코딩테스트+@ (11)
        • 알고리즘 스타디 (6)
        • 알고리즘 스타디 과제 (3)
        • 비공개 (0)
  • 인기 글

  • 최근 글

  • 최근 댓글

  • 링크

  • 공지사항

  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 태그

    언리얼 프로그래스바
    언리얼 인벤토리
    unreal 파쿠르
    언리얼 parkour
    언리얼 퀘스트시스템
    unreal inventory
    언리얼 ui
    언리얼 상호작용
    언리얼 behaviortree
    unreal 시퀀스
    unreal
    언리얼 npc
    언리얼 behavior tree
    언리얼 비헤이비어트리
    unreal 인벤토리
    언리얼 컷씬
    언리얼
    unreal npc
    언리얼 파쿠르
    언리얼 시퀀스
  • hELLO· Designed By정상우.v4.10.3
lucodev
프로그래머스(C++) - 게임 맵 최단거리
상단으로

티스토리툴바