문제

방향이 있는 간선과 방향이 없는 간선들의 목록들을 받아 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

+ Recent posts