• 티스토리 홈
  • 프로필사진
    유니얼
  • 방명록
  • 공지사항
  • 태그
  • 블로그 관리
  • 글 작성
유니얼
  • 프로필사진
    유니얼
    • 분류 전체보기 (295)
      • Unity (17)
        • 게임 개발 (5)
      • Unreal (24)
        • 게임 개발 (20)
      • DirectX (36)
      • 코딩테스트 (91)
        • 프로그래머스 (25)
        • 백준 (66)
      • Google Workspace (1)
      • Programing (102)
        • C# (68)
        • C++ (24)
        • JavaScript (10)
      • 게임 서버 프로그래밍 (17)
      • Web (6)
        • 슈퍼코딩 (6)
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
    등록된 댓글이 없습니다.
  • 최근 공지
    등록된 공지가 없습니다.
# Home
# 공지사항
#
# 태그
# 검색결과
# 방명록
  • [프로그래머스] 게임 맵 최단거리(C++)
    2024년 01월 21일
    • 유니얼
    • 작성자
    • 2024.01.21.:42
    728x90

    안녕하세요! 오늘은 코딩테스트 문제 중 하나인 "게임 맵 최단거리" 문제를 해결하는 방법에 대해 설명하려고 합니다. 이 문제는 ROR 게임에서 상대 팀 진영에 도달하기 위한 최단 경로를 찾는 문제입니다. 문제를 해결하는 과정과 코드를 자세히 알아보겠습니다.

    문제링크 : 

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

     

    프로그래머스

    코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

    programmers.co.kr

    Question_1

    Question_2
    Question_3

    문제 개요

    "게임 맵 최단거리" 문제는 ROR 게임에서 상대 팀 진영에 도달하기 위한 최단 경로를 찾는 문제입니다. 게임 맵은 2차원 배열로 표현되며, 각 칸은 벽(0) 또는 이동 가능한 경로(1)입니다. 목표는 시작 지점(1,1)에서 종료 지점(n,m)까지 가장 빠른 경로를 찾는 것입니다.

    해결 방법

    이 문제는 너비 우선 탐색(BFS) 알고리즘을 사용하여 해결할 수 있습니다. BFS는 각 단계에서 모든 이웃을 탐색하며, 가장 짧은 경로를 찾는 데 효과적인 방법입니다.

    코드 구현

    #include<vector>
    #include<bits/stdc++.h>
    using namespace std;
    
    int dy[] = {-1,0,1,0}; // 상, 우, 하, 좌 이동을 위한 y 좌표 변화량
    int dx[] = {0,1,0,-1}; // 상, 우, 하, 좌 이동을 위한 x 좌표 변화량
    
    // BFS 함수는 주어진 맵에서 최단 경로를 찾습니다.
    int BFS(vector<vector<int>> &maps){
        queue<pair<int,int>> q; // 탐색을 위한 큐
        int n = maps.size(); // 맵의 행 크기
        int m = maps[0].size(); // 맵의 열 크기
        vector<vector<int>> table(n,vector<int>(m,0)); // 방문한 위치와 거리를 기록하는 테이블
        q.push({0,0}); // 시작 위치 큐에 삽입
        table[0][0] = 1; // 시작 위치 거리를 1로 초기화
    
        while(q.size()){
            pair<int,int> current = q.front();
            q.pop();
            for(int i = 0; i < 4; i++){ // 상, 우, 하, 좌 방향으로 탐색
                int ny = current.first + dy[i];
                int nx = current.second + dx[i];
                // 맵 범위를 벗어나거나, 벽을 만나거나, 이미 방문한 위치는 무시
                if(ny < 0 || nx < 0 || ny >= n || nx >= m || maps[ny][nx] == 0 || table[ny][nx]) 
                    continue;
                table[ny][nx] = table[current.first][current.second] + 1; // 거리 업데이트
                q.push({ny,nx}); // 새 위치를 큐에 삽입
            }            
        }
        // 목표 지점에 도달한 경우 거리 반환, 그렇지 않으면 -1 반환
        return table[n - 1][m - 1] > 0 ? table[n - 1][m - 1] : -1;
    }
    
    // solution 함수는 주어진 게임 맵에서 BFS 함수를 호출하여 결과를 반환합니다.
    int solution(vector<vector<int> > maps)
    {
        int answer = BFS(maps);
        return answer;
    }

    코드 설명

    이 코드는 주어진 게임 맵에서 BFS 알고리즘을 사용하여 시작 지점부터 종료 지점까지의 최단 경로를 찾습니다. 각 칸에 도달할 때마다 거리를 기록하고, 이를 통해 최단 경로를 찾습니다. 맵의 경계를 넘어가거나, 벽이 있는 칸은 탐색에서 제외됩니다. 최종적으로 목표 지점에 도달할 수 없는 경우 -1을 반환합니다.

    결론

    "게임 맵 최단거리" 문제는 BFS 알고리즘을 통해 효과적으로 해결할 수 있습니다. 이 알고리즘은 각 단계에서 모든 가능한 이동 경로를 고려하며, 가장 빠른 경로를 찾는 데 중요합니다. 이러한 접근 방식은 다양한 최단 경로 문제에 적용될 수 있습니다.

    반응형
    다음글
    다음 글이 없습니다.
    이전글
    이전 글이 없습니다.
    댓글
조회된 결과가 없습니다.
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
목차
표시할 목차가 없습니다.
    • 안녕하세요
    • 감사해요
    • 잘있어요

    티스토리툴바