[Programmers]#Level2_방문 길이, 미로 찾기 유형, BFS, 너비 우선 탐색

2024. 4. 17. 14:19· 문제 풀이/Programmers 문제 풀이
목차
  1. #1. 문제
  2. #2. 풀이
  3. 1. BFS
  4. 2. 미로 찾기 유형, 이동 값이 동일하면 BFS!
  5. #3. 코드

 

#1. 문제

 

프로그래머스

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

programmers.co.kr

 


 

#2. 풀이

 

1. BFS

 

[자료구조]#6_그래프

#0. 개념 1. 그래프? [정의] : 그래프는 노드와 간선들의 집합으로 이루어진 비 선형 자료구조입니다. 그래프의 노드들은 간선을 통해 연결되어 일종의 네트워크를 형성합니다. 그래프는 노드와

webddevys.tistory.com

너비 우선 탐색은 그래프의 모든 정점을 탐색하는 방법 중 하나입니다. BFS는 현재 정점과 인접한 정점들을 우선적으로 탐색합니다. 일반적으로, BFS는 큐 자료구조를 활용하여 구현합니다. 

 

2. 미로 찾기 유형, 이동 값이 동일하면 BFS!

  1. 먼저, 현재 정점으로부터 인접한 정점들을 찾기 위해 'U', 'D', 'R', 그리고 'L'을 키로 설정하고 각각 현재 정점으로부터 X좌표와 Y좌표의 이동 값을 값으로 map을 초기화합니다.
  2. 동일한 가중치의 미로 찾기 유형에서 활용하는 BFS 방식을 활용합니다.

 


 

#3. 코드

#include <string>
#include <vector>
#include <map>
#include <unordered_map>
using namespace std;

typedef pair<int, int> p;

p cPos = {0, 0};
map<char, p> d = {
    {'U', {1, 0}},
    {'D', {-1, 0}},
    {'R', {0, 1}},
    {'L', {0, -1}}};

struct Path
{
    p u, v;
    Path(p _u, p _v) : u(_u), v(_v) {}
    ` bool CheckIsVisited(p a, p b)
    {
        if (a == u && b == v)
            return true;
        else if (b == u && a == v)
            return true;
        else
            return false;
    }
};

vector<Path> visitedPath;

int solution(string dirs)
{
    int ans = 0;

    for (int i = 0; i < (int)dirs.size(); ++i)
    {
        int ny = cPos.first + d[dirs[i]].first;
        int nx = cPos.second + d[dirs[i]].second;

        // #1. 벗어난 경로인지 체크
        if (ny < -5 || ny > 5 || nx < -5 || nx > 5)
            continue;

        // #2. 해당 경로 방문 여부 확인
        bool checkIsVisited = false;
        for (auto &path : visitedPath)
        {
            if (path.CheckIsVisited({cPos.first, cPos.second}, {ny, nx}))
                checkIsVisited = true;
        }

        // #3. 경로 카운트 추가 여부 확인 : 새로운 경로 추가 및 경로 카운팅
        if (!checkIsVisited)
        {
            visitedPath.push_back(Path(cPos, {ny, nx}));
            ans++;
        }

        cPos = {ny, nx};
    }

    return ans;
}

 


 

 

 

 

저작자표시 (새창열림)

'문제 풀이 > Programmers 문제 풀이' 카테고리의 다른 글

[Programmers]#Level3_등굣길, DP  (0) 2024.05.17
[Programmers]#Level2_스킬 트리, find 알고리즘  (0) 2024.04.30
[Programmers]#Level2_게임 맵 최단 거리, 미로 찾기 유형, 최단 경로 알고리즘, BFS, 너비 우선 탐색  (0) 2024.04.15
[Programmers]#Level3_네트워크, DFS, 깊이 우선 탐색  (0) 2024.04.15
[Programmers]#Level2_더 맵게, 우선순위 큐, 최소 힙  (0) 2024.04.14
  1. #1. 문제
  2. #2. 풀이
  3. 1. BFS
  4. 2. 미로 찾기 유형, 이동 값이 동일하면 BFS!
  5. #3. 코드
'문제 풀이/Programmers 문제 풀이' 카테고리의 다른 글
  • [Programmers]#Level3_등굣길, DP
  • [Programmers]#Level2_스킬 트리, find 알고리즘
  • [Programmers]#Level2_게임 맵 최단 거리, 미로 찾기 유형, 최단 경로 알고리즘, BFS, 너비 우선 탐색
  • [Programmers]#Level3_네트워크, DFS, 깊이 우선 탐색
Hardii2
Hardii2
개발 블로그Hardii2 님의 블로그입니다.
Hardii2
개발 블로그
Hardii2
전체
오늘
어제
  • 분류 전체보기
    • 알고리즘
    • 웹 개발
      • Node.js
      • React
    • 게임개발
      • DirectX12
      • 관련 지식
      • Unreal C++
      • Unreal 블루프린트
    • 언어
      • Effective C++
      • Basic C++
      • 디자인 패턴
      • 자료구조
      • 기술 질문
    • 문제 풀이
      • BOJ 문제 풀이
      • Programmers 문제 풀이
      • geeksForgeeks 문제 풀이
    • 수학
      • 확률과 통계
      • 게임수학
    • 개인프로젝트
    • 그룹프로젝트
      • PM
      • Dev
    • Github

블로그 메뉴

  • 홈
  • 글쓰기

공지사항

인기 글

태그

  • 트리
  • 그래프
  • 개발
  • 기술 질문
  • DP
  • unreal
  • 디자인 패턴
  • 최단 경로
  • dfs
  • set
  • Unreal Blueprint
  • C++
  • stl
  • programmers
  • BOJ
  • 우선순위 큐
  • 정렬
  • BFS
  • Effective C++
  • 알고리즘

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
Hardii2
[Programmers]#Level2_방문 길이, 미로 찾기 유형, BFS, 너비 우선 탐색
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.