반응형
인접 행렬 생성하기
문제
방향이 있는 간선과 방향이 없는 간선들의 목록들을 받아 2차원 배열의 인접행렬을 반환하는 함수를 작성하세요.
조건
각 간선은 3가지 정보를 담고 있습니다.
- 0번째: 간선의 시작 정점 (0 이상의 정수)
- 1번째: 간선의 도착 정점 (0 이상의 정수)
- 2번째: 방향성 ('undirected' 일시 무향, 'directed' 일시 방향)
입력
인자 1: edges
- Number 타입의 방향/무향인 간선들의 목록이 담긴 배열
출력
- Array 타입을 리턴해야 합니다.
- 2차원 배열의 인접 행렬
주의 사항
- 정점 0에서 정점 4로 이어주는 간선이 존재할 경우 정점 1, 2, 3도 존재합니다.
- 반환하는 인접행렬은 2차원 배열이며, 행(row)는 바깥 배열, 열(column)은 안쪽 배열입니다.
- let matrix = [[0, 0], [0, 0]]
- matrix[0] === 0번째 행
- matrix[0][0] === 0번째 행의 0번째 열
- 두 정점간의 간선의 유무는 0과 1로 표시합니다.
- 0: 두 정점간에 간선이 존재하지 않을 경우
- 1: 두 정점간에 간선이 존재할 경우
- 아래의 2차원 배열에서 세로축은 시작 정점, 가로축은 도착 정점입니다.
- 음수는 올 수 없습니다.
- self loop 없습니다.
const matrix = [
[0, 0, 0],
[0, 0, 0],
[0, 0, 0],
];
입출력 예시
const output1 = createMatrix([
[0, 3, "directed"],
[0, 2, "directed"],
[1, 3, "directed"],
[2, 1, "directed"],
]);
console.log(output1);
/**
* [
* [0, 0, 1, 1],
* [0, 0, 0, 1],
* [0, 1, 0, 0],
* [0, 0, 0, 0]
* ]
*/
const output2 = createMatrix([
[0, 2, "directed"],
[2, 4, "undirected"],
[1, 3, "undirected"],
[2, 1, "directed"],
]);
console.log(output2);
/**
* [
* [0, 0, 1, 0, 0],
* [0, 0, 0, 1, 0],
* [0, 1, 0, 0, 1],
* [0, 1, 0, 0, 0],
* [0, 0, 1, 0, 0],
* ]
*/
코드
function createMatrix(edges) {
// TODO: 여기에 코드를 작성합니다.
// 1. 만들 행렬의 사이즈를 찾는다. nxn 행렬인지? => edges 배열 각 요소의 첫번째와 두번째 인덱스 값 중 최댓값을 찾는다.
// 2. 행렬을 만든다. 1에서 구한 n에 1을 더한 n+1 사이즈의 배열을 만들어준다. 처음에는 다 0으로 채워준 후, 각 요소들을 다시 배열로 만들어준다.
// 3. 해당 간선이 무향인지 일시방향인지에 따라 행렬에 값을 넣어준다. 행렬 완성!
let max = 0;
for(let i=0;i<edges.length;i++){
let curMax = Math.max(...edges[i].slice(0, 2));
curMax > max ? max = curMax : null; // curMax가 max 값보다 작으면 아무것도 하지 않는다.
}
// new Array(max + 1).fill(new Array(max + 1)) => 새로 만들어진 Array의 주소를 참조하므로 주의!
let result = new Array(max+1).fill(0).map(() => new Array(max+1).fill(0));
edges.forEach((edge) => {
let [row, column, direction] = edge;
if(direction === 'undirected'){
result[column][row] = 1;
}
result[row][column] = 1;
})
return result;
}
반응형
'코드스테이츠 SEB FE 41기 > 데일리 코딩(Hard)' 카테고리의 다른 글
[알고리즘/javascript][DFS / BFS] 연결된 정점들 (0) | 2022.11.18 |
---|---|
[알고리즘/javascript][Graph] 인접 행렬 길찾기 (0) | 2022.11.18 |
[알고리즘/javascript]uglyNumbers (0) | 2022.11.17 |
[알고리즘/javascript] getItemFromTwoSortedArrays (0) | 2022.11.17 |
[알고리즘/javascript] 큐 - 심화 (0) | 2022.11.17 |