Jieunny์ ๋ธ๋ก๊ทธ
S4) Unit 1. [์ค์ต] Tree & Graph ๋ฌธ์ ๋ณธ๋ฌธ
๐ฃ ์ธ์ ํ๋ ฌ ๊ธธ์ฐพ๊ธฐ
Q. ์ฃผ์ด์ง ์ธ์ ํ๋ ฌ์์ ํ ์ ์ ์ผ๋ก๋ถํฐ ๋ค๋ฅธ ์ ์ ์ผ๋ก ์ด์ด์ง๋ ๊ธธ์ด ์กด์ฌํ๋์ง ๋ฐํํด์ผ ํฉ๋๋ค.
function getDirections(matrix, from, to) {
// TODO: ์ฌ๊ธฐ์ ์ฝ๋๋ฅผ ์์ฑํฉ๋๋ค.
if(matrix[from][to] === 1) return true;
const queue = [];
queue.push(from);
const isVisited = new Array(matrix.length).fill(false);
isVisited[from] = true;
//console.log(matrix[0].length);
console.log(isVisited);
while(queue.length > 0){
let pop = queue.shift();
if(pop === to) return true;
// ๋ด๊ฐ ํ์์ ๋บ ์ ์ ์ด ๋์ฐฉ์ง์ ์ด๋ผ๋ฉด true ๋ฐํ
for(let i=0; i<matrix[pop].length; i++){
// ํ์์ ๋บ ์ ์ ์ ๊ฐ์ ํ์ธ
if(matrix[pop][i] && isVisited[i] === false){
// ๊ฐ์ ์ด ์๊ณ , ํด๋น ์ ์ ์ง๋๊ฐ ์ ์์ผ๋ฉด
queue.unshift(i);
// ๋ค์์ ๊ฐ๊ธฐ ์ํด์ ํ์ ์ ์ฅ
isVisited[i] = true;
}
}
}
return false;
// ๋ค ๋์๋๋ฐ๋ ์ฐพ๋ ์ ์ ์ ๋๋ฌํ์ง ๋ชปํ๋ค๋ฉด false ๋ฐํ
}
๐ฃ ์ฐ๊ฒฐ๋ ์ ์ ๋ค
Q. ๋ฐฉํฅ์ด ์๋ ๊ฐ์ ๋ค์ ๋ชฉ๋ก์ด ์ฃผ์ด์ง ๋, ์ฐ๊ฒฐ๋ ์ ์ ์ ์ปดํฌ๋ํธ(๊ทธ๋ฃน๋ค)๊ฐ ๋ช ๊ฐ์ธ์ง ๋ฐํํ๋ ํจ์๋ฅผ ์์ฑํ์ธ์.
function connectedVertices(edges) {
// TODO: ์ฌ๊ธฐ์ ์ฝ๋๋ฅผ ์์ฑํฉ๋๋ค.
const max = Math.max(...edges.flat());
// flat() => ๋ชจ๋ ๋ฐฐ์ด์ ์ด์ด๋ถ์ธ ์๋ก์ด ๋ฐฐ์ด ๋ฐํ
const matrix = new Array(max + 1).fill(0).map(item => new Array(max + 1).fill(0));
// ์ธ์ ํ๋ ฌ ๋ง๋ค์ด์ฃผ๊ธฐ
let isvisited = new Array(matrix.length).fill(false);
// ๋ฐฉ๋ฌธํ ์ ์๋์ง ์ ์ฅํ ๋ฐฐ์ด
for(let i=0; i<edges.length; i++){
// ๋ง๋ค์ด ๋ ์ธ์ ํ๋ ฌ์ ์ธ์๋ก ๋ฐ์ ๋ฐฐ์ด ๋๋ฉด์ ์ธ์ ํ๋ ฌ ์์ฑํด์ฃผ๊ธฐ
matrix[edges[i][0]][edges[i][1]] = 1;
matrix[edges[i][1]][edges[i][0]] = 1;
}
let count = 0;
//i๋ฒ์งธ ์ ์ ์ ์ง๋๊ฐ ์ ์ด ์๋ค๋ฉด bfs๋ฅผ ์คํ
for (let i = 0; i < matrix.length; i++) {
if (!isvisited[i]) {
// ๋ฐฉ๋ฌธํ ์ ์ด ์๋ค๋ฉด
bfs(matrix, i, isvisited);
// bfs๋ก ์คํํด์ค๋ค.
count++;
}
}
return count;
}
function bfs(matrix, from, isvisited) {
// ๋ชจ๋ ์ ์ ๋๋ฉด์ ํ์ธ
let queue = [from];
// ์์ํ ์ ์ queue์ ๋ฃ์ด์ฃผ๊ณ
isvisited[from] = true;
// queue์ ๋ฃ์ด์ค ์ ์ ์ ๋ฐฉ๋ฌธ ํ๊ฑฐ๋๊น ๋ฐฉ๋ฌธ ๋ฐฐ์ด true๋ก ๋ฐ๊ฟ์ฃผ๊ธฐ
while (queue.length > 0) {
let pop = queue.pop();
// ํ์์ ํ๋์ฉ ๋นผ๋ฉด์
for (let i = 0; i < matrix[pop].length; i++) {
// ์ง๊ธ ์๋ ์ ์ ์์ ๋ชจ๋ ์ ์ ์ ๋๋ฉด์
if (matrix[pop][i] === 1 && !isvisited[i]) {
// ์ง๊ธ ์๋ ์ ์ ์์ ์ธ์ ํ ์ ์ ์ฐพ๊ณ , ๊ทธ ์ ์ ์ ๋ฐฉ๋ฌธํ ์ ์ด ์๋ค๋ฉด
queue.unshift(i);
// ํ์ ๋งจ ์์ ๊ทธ ์ ์ ์ ๋ฃ์ด์ฃผ๊ณ
isvisited[i] = true;
// ๊ทธ ์ ์ ๋ฐฉ๋ฌธํ๋ค๊ณ ํ์ํด์ฃผ๊ธฐ
}
}
}
}
'CodeStates > Training' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
S4) Unit 3. [์ค์ต] ๊ฐ๋จํ ์น์ฑ ๋ฒ๋ค๋ง ํ ๋ฐฐํฌํ๊ธฐ (0) | 2023.03.20 |
---|---|
S4) Unit 2. [์ค์ต] ๋ฐ์ํ ์น ๊ตฌํํ๊ธฐ (0) | 2023.03.17 |
S4) Unit 1. [์ค์ต] Stack & Queue ๋ฌธ์ (0) | 2023.03.14 |
S3) Unit 8. [์ค์ต] Coz'Mini Hackaton (Todo-List) (2) | 2023.03.10 |
S3) Unit 7. [์ค์ต] OAuth(๊นํ๋ธ) ์ฌ์ฉํด์ ๋ก๊ทธ์ธ ๊ธฐ๋ฅ ๊ตฌํํ๊ธฐ (0) | 2023.03.09 |