반응형

BFS 26

백준 2589 : 보물섬 - javascript(bfs)

문제 출처 https://www.acmicpc.net/problem/2589 정답 풀이 최단 거리 ? bfs 알고리즘을 사용하면 된다.  시작점이 어디냐에 따라 최단 거리가 달라지니까, for 이중 반복문을 통해 모든 L을 시작점으로 둔다.  그리고 bfs로 최대로 먼 곳을 갱신해준다. 정답 코드//상하좌우, 육지로 이동 //한 칸 이동 - 한 시간 걸림 //보물 : 최단 거리 이동하는데 , 가장 긴 시간이 걸리는 육지 두곳에 묻혀있음. //bfs 알고리즘 사용 //어디서 시작하냐도 중요해서 전체 L 들어가야함 //bfs로 탐색 후 그때의 max 값 구하기 let input = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n');..

백준 16928: 뱀과 사다리 게임 - javascript(bfs)

문제 출처 https://www.acmicpc.net/problem/16928 정답 풀이 베베 꼬아서 생각했던 문제였는데, 사실 간단하다.  기존에는 최대한 사다리를 타고 가게 하면서, 뱀을 피하면서 ~ 아무것도 해당되지 않을 때는 주사위로 이동하면서 ~~ ... 그것이 아니라 queue에다가 현재 위치 = 1주사위 던진 횟수 = 0 을 먼저 넣는다.  그리고 주사위를 돌리는 거다 !! 1부터 6까지 ! 그때의 next position 이 나오는데 => 사다리가 잇다면 next position을 사다리로 이동한 결과를 넣어주고 => 뱀이 있다면 next position을 내려간 이동 결과를 넣어준다.  이를 위해서 사다리와 뱀 좌표는 map 객체로 관리한다.  이걸 계속하다가 위치가 100이상인 점이 나..

백준 1941: 소문난 칠공주 - javascript(DFS/BFS)

문제 출처 https://www.acmicpc.net/problem/1941 정답 풀이 dfs로 상하좌우 이동하면서 조건에 맞는 (Y가 3이하) 학생으로 채우는 7명을 탐색한다면, 틀린다. 왜냐하면 아래와 같이 T자 모양은 DFS로 만들지 못한다.   따라서 , 2 부분으로 나눠서 구현해야 한다. 1. DFS를 통한 7명의 학생 선택 2. 선택된 7명의 학생이 인접한지 확인하는 BFS 정답 코드 const input = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n');const graph = input.map(el => el.split(''));function solution(graph) { let answer = 0; ..

프로그래머스: [PCCP 기출 문제] 석유 시추 - javascript(bfs 효율성)

문제 출처 https://school.programmers.co.kr/learn/courses/30/lessons/250136 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr정답 풀이 처음 풀이는 효율성에서 틀린 점수를 받았다. 아래 방식으로 풀었는데, 아무래도 checked를 가로 이동할 때마다 초기화하면서, 똑같은 곳을 bfs로 또 탐색 하게 코드를 작성했기 때문이다.  따라서, 미리 주어진 그래프로 석유가 있는 곳을 저장해놨다. 해당 위치는 1번땅이야 ~ 2번땅이야 ~ 3번땅이야 ~ 이것을 dp 그래프로 저장해놨다. - 예를 들어 dp[0][2] = 1 ..

백준 2638: 치즈 - javascript(bfs)

문제 출처 https://www.acmicpc.net/problem/2638 정답 풀이 정답 코드 const input = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n');const [n, m] = input.shift().split(' ').map(v => +v);const arr = [];for (let i = 0; i +v));}function solution(n, m, graph) { let answer = 0; bfs(n, m, graph); // 초기 외부 공기(-1)로 표시 while (true) { let hasCheese = false; // 치즈가 남아있는지 확인 l..

프로그래머스: 블록 이동하기 - javascript(bfs 끝장내기)

문제 출처 https://school.programmers.co.kr/learn/courses/30/lessons/60063 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 정답 풀이 그래프 최단 경로 ? bfs 알고리즘을 사용해야 되는 것은 모두 다 알거다. 그런데 구현하기가 어려웠는데, 그 이유는 함수화 하지 않아서 solution 기본 함수가 복잡해진 탓이라고 생각한다.  또, 회전하는 경우를 가로 => 세로 인 것과 세로 => 가로를 구분해줘야 한다.  또 이미 방문한 위치는 Set 객체를 이용하면 된다. 정답 코드function solution(boa..

백준 16234: 인구 이동 - javascript(bfs)

문제 출처 https://www.acmicpc.net/problem/16234 정답 풀이 bfs 알고리즘을 활용했다.  - 일단 주어진 board의 전체를 돈다.   - 이때 한번 방문한 위치는 안간다.  - 모든 board를 다 돌았을 때 그 어떤 값도 변경되지 않는다면 반복문에서 break를 한다.  - 한번 방문한 곳에서 bfs 함수를 돌린다.    - 이때 arr 배열에 조건에 맞는 (L 이상 R이하 차이) 위치들을 push 한다.  - arr의 위치들의 board 값을 다 더하고 평균을 내서 새롭게 board에 값을 넣어준다.  정답 코드 const input = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n')cons..

백준: 인구 이동 - 실수 축제 (split, i 사용, queue 초기 값 설정, checked )

실수1. split(' ') 작성 안함.백준에서는 치명적인 실수였다.  실수2. 변수의 재사용 (x,y, i, d) 진짜 이런 실수는 하면 안된다. 매개변수를 i,j 로 받아놓고, 4가지 방향으로 뻗어줄 때 변수를 i로 작성했었다.  이제 매개변수로 받는 값은 x,y로 해야한다. 또 방향 전환 하는 변수는 d로 설정하자. 이래야 다음에는 실수를 하지 않을 것 같다.  실수3. queue의 초기값에 대하여queue의 초기값에 대하여 설정해야 할 것들 checked  나 arr에 push 하기 이런건 해당 부분에서 처리해주자. 실수4. checked - checked를 true로 설정해야 한다. 이걸 계속 false 로 했었음;;

프로그래머스: 미로 탈출 명령어 - 실수 축제 (그래프 탐색에서 DFS와 BFS의 사용 )

아래 세가지 이유에 대해 알아보자.  - 그래프 탐색에서 DFS와 BFS 차이점- DFS: 스택, BFS:큐를 사용하는 이유 - 각 기법을 언제 사용하는지  ## DFS와 스택 dfs는 그래프 탐색 시 "한 방향으로 끝까지 탐색하고, 더이상 갈 곳이 없으면 되돌아와서 다른 경로를 탐색하는" 방법이다.이 방법은 재귀적인 탐색을 요구한다. ### 스택을 사용하는 이유 - LIFO(Last In First Out) : 스택은 마지막에 삽입된 요소를 가장 먼저 꺼내는 자료구조다. dfs에서는 가장 최근에 발견된 노드를 먼저 탐색해야 하기 때문에, 노드를 탐색하면서 경로를 쌓아두었다가 더이상 갈 곳이 없을 때 되돌아가는데 적합하다.   dfs에서 A 에서 출발해서 E를 찾는 과정을 살펴보자. A에서 출발하여 B로..

프로그래머스 : 블록 이동하기 - javascript (bfs)

## 문제 출처 https://school.programmers.co.kr/learn/courses/30/lessons/60063 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr ## 문제 풀이 힌트 출제 의도: BFS에 대해 알고 있고, 이를 응용해(단순 암기가 아니라) 코드를 작성할 수 있는지 파악  세팅 1) 이차원 그래프 새로 생성하기  - 좌표 자체가 1,1로 시작하고, n,n 을 구해야 하기 때문에 코드 편의성을 위해 n+2, n+2 그래프로 생성.   - 전체를 벽인 1로 세팅한 후, 주어진 board 값에 맞춰서 0인 값으로 다시 넣어준다. 2)..

반응형