728x90
문제
https://www.acmicpc.net/problem/15723
문제 해석
이 문제는 다른 그래프 이론과 비슷하다.
다만, 순회할 배열을 만들때 알파벳을 그대로 만들 수 없으니, 아스키 코드로 변경 후 풀면 된다.
풀이
const filePath = process.platform === "linux" ? "dev/stdin" : "../test.txt";
const input = require("fs").readFileSync(filePath).toString().trim().split("\n");
function solution(input) {
const N = +input.shift();
const premise = input.slice(0, N).map(v => v.split(' '));
const after = input.slice(N);
const M = +after.shift();
const conclusion = after.map(v => v.split(' '));
const answer = [];
const graph = Array.from({ length: 26 }, () => []);
for (const [first, , second] of premise) {
const from = first.charCodeAt(0) - 'a'.charCodeAt(0);
const to = second.charCodeAt(0) - 'a'.charCodeAt(0);
graph[from].push(to);
}
function dfs(from, target) {
const visited = Array(26).fill(false);
const queue = [from];
visited[from] = true;
while (queue.length > 0) {
const cur = queue.shift();
if (cur === target) return true;
for (const next of graph[cur]) {
if (!visited[next]) {
visited[next] = true;
queue.push(next);
}
}
}
return false;
}
for (const [first, , second] of conclusion) {
const from = first.charCodeAt(0) - 'a'.charCodeAt(0);
const to = second.charCodeAt(0) - 'a'.charCodeAt(0);
if (dfs(from, to)) {
answer.push('T');
} else {
answer.push('F');
}
}
return answer.join('\n');
}
console.log(solution(input));
끝
728x90
'WEB > 백준 문제 풀이' 카테고리의 다른 글
백준 1261 알고스팟 (node.js) (0) | 2024.06.29 |
---|---|
백준 11403 경로 찾기 (node.js) (0) | 2024.06.27 |
백준 16987 계란으로 계란치기 (node.js) (0) | 2024.06.24 |
백준 15686 연산자 끼워 넣기 (node.js) (0) | 2024.06.22 |
백준 15686 치킨 배달 (node.js) (0) | 2024.06.20 |