문제 설명 https://school.programmers.co.kr/learn/courses/30/lessons/154540 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 풀이 방법 이 문제는 BFS 알고리즘을 이용해서 풀었다. BFS로 풀이한 까닭은 혹시 모르는 시간 초과 에러를 방지하기 위함이다. DFS로 풀이하게 되면 갈래길에서 다시한번 노드를 역행하는 방식이 걱정되어서 이다. 방문했던 노드를 기록하기 위해 0으로 채워진 2차원 배열과 bfs 함수 내부에 검증할 섬의 숫자를 담는 큐, 머물 수 있는 일 수를 선언해 큐 내부가 비어질때 까지 진..
BFS
문제 설명 https://www.acmicpc.net/problem/2178 2178번: 미로 탐색 첫째 줄에 두 정수 N, M(2 ≤ N, M ≤ 100)이 주어진다. 다음 N개의 줄에는 M개의 정수로 미로가 주어진다. 각각의 수들은 붙어서 입력으로 주어진다. www.acmicpc.net 문제 풀이 방법 미로탐색(최단거리 탐색)은 BFS의 대표적인 문제 풀이 방법이다. 이전에 풀었던 문제중 비슷한 문제를 참고해 문제를 풀었다. 코드 const path = __dirname + '/예제.txt'; // /dev/stdin let input = require('fs').readFileSync(path).toString().trim().split('\n').map(e => e.split(' ').map(e ..
문제 풀이 방법 최단 거리를 구하는 문제는 BFS를 이용해 풀어야 한다. 문제는 정석적인 BFS문제이며 큐를 이용해 탐색할 노드를 저장한 뒤 해단 노드의 정보를 이용해 맵의 4방향을 검증하며 방문하지 않고, 길이 있다면 move를 1더한 값과 함께 큐에 저장한다. 위의 검증을 반복하며 목표 좌표에 도달할 시에 move를 반환한다. 코드 function solution(maps) { let xLen = maps[0].length; let yLen = maps.length; let xGoal = xLen - 1; let yGoal = yLen - 1; let rotaX = [0, 0, -1, 1]; let rotaY = [-1, 1, 0, 0]; let que = [[0, 0, 1]]; while(que.l..
문제 설명 두 개의 단어 begin, target과 단어의 집합 words가 있습니다. 아래와 같은 규칙을 이용하여 begin에서 target으로 변환하는 가장 짧은 변환 과정을 찾으려고 합니다. 1. 한 번에 한 개의 알파벳만 바꿀 수 있습니다. 2. words에 있는 단어로만 변환할 수 있습니다. 예를 들어 begin이 "hit", target가 "cog", words가 ["hot","dot","dog","lot","log","cog"]라면 "hit" -> "hot" -> "dot" -> "dog" -> "cog"와 같이 4단계를 거쳐 변환할 수 있습니다. 두 개의 단어 begin, target과 단어의 집합 words가 매개변수로 주어질 때, 최소 몇 단계의 과정을 거쳐 begin을 target으로..
그래픽 탐색이란? 하나의 정점으로 부터 시작하여 차례대로 모든 정점들을 한번씩 방문하는 것 EX) 특정 도시에서 다른 도시로 갈 수 있는지 없는지 너비 우선 탐색 (BFS, Bredth-First-Search) 정의 루트 노드(혹은 임의의 다른 노드)에서 시작해서 인접한 노드를 먼저 탐색하는 방법 시작 정점부터 가까운 정점을 먼저 방문하고 먼 정점을 나중에 방문하는 방법 즉, 깊게 탐색하기 전에 넓게 탐색하는 것이다. 사용하는 곳 두 노드 사이의 최단 경로 혹은 임의의 경로를 찾고 싶을 때. 특징 1) 직관적이지 않은 점 - BFS는 시작 노드에서 거리에 따라 단계별로 탐색한다고 본다. 2) 재귀적인 동작을 하지 않는다. 3) 어떤 노드를 방문했는지 여부를 기록하여 무한루프에 빠질 위험을 제거 4) 방문..