문제
방향이 있는 간선과 방향이 없는 간선들의 목록들을 받아 2차원 배열의 인접행렬을 반환하는 함수를 작성하세요.
조건
각 간선은 3가지 정보를 담고 있습니다.
- 0번째: 간선의 시작 정점 (0 이상의 정수)
- 1번째: 간선의 도착 정점 (0 이상의 정수)
- 2번째: 방향성 (1 == 일시 무향, 0 == 일시 방향)
입력
인자 1: edges
- int 타입의 방향/무향인 간선들의 목록이 담긴 배열
출력
- Array 타입을 리턴해야 합니다.
- 2차원 배열의 인접 행렬
주의 사항
- 정점 0에서 정점 4로 이어주는 간선이 존재할 경우 정점 1, 2, 3도 존재합니다.
- 반환하는 인접행렬은 2차원 배열이며, 행(row)는 바깥 배열, 열(column)은 안쪽 배열입니다.
- int[][] matrix = new int[][]{{0, 0}, {0, 0}}
- matrix[0] == 0번째 행
- matrix[0][0] == 0번째 행의 0번째 열
- 두 정점간의 간선의 유무는 0과 1로 표시합니다.
- 0: 두 정점간에 간선이 존재하지 않을 경우
- 1: 두 정점간에 간선이 존재할 경우
- 아래의 2차원 배열에서 세로축은 시작 정점, 가로축은 도착 정점입니다.
- 음수는 올 수 없습니다.
- self loop 없습니다.
public class AdjacentMatrix {
public static void main(String[] args) {
/*
- 방향이 있는 간선과 방향이 없는 간선들의 목록들을 받아 2차원 배열의 인접 행렬을 반환하는 함수를 작성
- 조건
1) 0번째 : 간선의 시작 정점
2) 1번째 : 간선의 도착 정점
3) 2번째 방향성 ( 1==무향, 0==유향 )
- 출력
1) Array type
2) 2차원 배열 인접 행렬
- 주의사항
1) 0 ~ 4로 이어주는 간선이 존재할 경우 1,2,3 정점도 존재합니다.
2) 두 정점간 간선의 유무는 0과 1로 표시
*/
int result[][] = new int[][]{
{0, 3, 0},
{0, 2, 0},
{1, 3, 0},
{2, 1, 0},
};
int[][] matrix = createMatrix(result);
for(int i=0; i< matrix.length; i++){
for(int j=0; j< matrix.length; j++){
System.out.print(matrix[i][j] + " ");
}
System.out.println();
}
}
public static int[][] createMatrix(int[][] edges){
// 가장 큰 정점
int maxLength = 0;
for(int i=0; i< edges.length; i++){
for(int j=0; j< 2; j++){
if(maxLength < edges[i][j]){
maxLength = edges[i][j];
}
}
}
int[][] result = new int[maxLength+1][maxLength+1];
for(int i=0; i< edges.length; i++){
if(edges[i][2] == 1){
result[edges[i][0]][edges[i][1]] = 1;
result[edges[i][1]][edges[i][0]] = 1;
} else {
result[edges[i][0]][edges[i][1]] = 1;
}
}
return result;
}
}
'알고리즘' 카테고리의 다른 글
decryptCaesarCipher (0) | 2022.08.09 |
---|---|
인접 행렬 길찾기 (0) | 2022.08.04 |
문자열에서 숫자 추출 알고리즘 (0) | 2022.08.01 |
동전 교환 알고리즘 (0) | 2022.07.30 |
Binary Search Algorithm (0) | 2022.07.28 |