Skip to content

Commit

Permalink
#18 23.11.03 > 1 > 스타트링크 다시풀기
Browse files Browse the repository at this point in the history
  • Loading branch information
beurmuz committed Nov 3, 2023
1 parent 150c7a1 commit 7cf0249
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 9 deletions.
2 changes: 1 addition & 1 deletion src/bj/silver/1/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
| 24 | 1946 | [신입 사원](./1946.js) | 23.05.23 ||
| 25 | 16194 | [카드 구매하기2](./16194.js) | 23.05.25 | X |
| 26 | 14651 | [걷다보니 신천역 삼](./14651.js) | 23.05.25 ||
| 27 | 5014 | [스타트링크](./5014.js) | 23.06.17 | [23.06.18](./replay/5014.js) |
| 27 | 5014 | [스타트링크](./5014.js) | 23.06.17 | [23.11.03](./replay/5014.js) |
| 28 | 1911 | [흙길 보수하기](./1911.js) | 23.06.19 | X |
| 29 | 12852 | [1로 만들기 2](./12852.js) | 23.06.24 | X |
| 30 | 20922 | [겹치는 건 싫어](./20922.js) | 23.06.26 | X |
Expand Down
18 changes: 10 additions & 8 deletions src/bj/silver/1/replay/5014.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
/**
* [bfs 문제]
* - visited를 queue에 push할때 방문체크를 바로 해주었더니, 어제 짰던 코드보다 시간이 2배, 메모리도 2배 더 사용됐다.
* - '적어도 몇번~?', '최소한으로~' 하면 BFS로 풀면 된다.
*/
const [F, S, G, U, D] = require("fs")
.readFileSync("/dev/stdin")
Expand All @@ -12,28 +13,29 @@ const [F, S, G, U, D] = require("fs")
.map((v) => +v);

const solution = (F, S, G, U, D) => {
// 층수가 정해져있으므로 visited 배열의 범위는 F+1층까지로 한다.
// 총 F층. 방문 여부를 기록할 배열 선언
const visited = Array.from({ length: F + 1 }, () => false);

// 현재 층수가 목적지와 같으면 바로 종료한다.
if (S === G) return 0;
if (S === G) return 0; // 현재 위치가 목적지라면 0을 return한다.

const bfs = () => {
const queue = [[S, 0]]; // [시작점, 버튼을 누른 횟수]
let queue = [];
queue.push([S, 0]); // [시작 층수, 버튼을 누른 횟수]
visited[S] = true; // 방문 표시

while (queue.length) {
const [now, count] = queue.shift();
if (now === G) return count; // 현재 지점이 G라면 탐색을 종료한다.
let [nowFloor, count] = queue.shift();
if (nowFloor === G) return count; // 현재 층수가 G와 같다면, count를 return 한다.

for (let nx of [now + U, now - D]) {
for (let nx of [nowFloor + U, nowFloor - D]) {
// 최고층이 F이므로 nx는 1층부터 F 사이에 존재해야 한다.
if (!visited[nx] && nx > 0 && nx <= F) {
queue.push([nx, count + 1]);
visited[nx] = true;
}
}
}
};
visited[S] = true;
let answer = bfs();
return answer ? answer : "use the stairs";
};
Expand Down

0 comments on commit 7cf0249

Please sign in to comment.