문제 링크 코딩테스트 연습 - 네트워크 네트워크란 컴퓨터 상호 간에 정보를 교환할 수 있도록 연결된 형태를 의미합니다. 예를 들어, 컴퓨터 A와 컴퓨터 B가 직접적으로 연결되어있고, 컴퓨터 B와 컴퓨터 C가 직접적으로 연결되어 있�� programmers.co.kr 풀이 DFS/BFS 파트에 있지만 문제를 보고 union-find가 먼저 떠올라서 union-find로 풀었다. // 요약 // find_root() - root를 찾아주는 재귀로 구현한 함수 // init 자신을 root로 설정 // process 인접행렬 computers가 대각선을 기준으로 대칭되므로 연산을 줄이기 위해 반복문을 최소한으로 돌게한다. (i = 0~n-1일 때, j=i+1 ~ n이다) { 연결돼있다면, 각 i와 j의 roo..
문제 링크 코딩테스트 연습 - 섬 연결하기 4 [[0,1,1],[0,2,2],[1,2,5],[1,3,1],[2,3,8]] 4 programmers.co.kr 풀이 전형적인 크루스칼 + 유니온파인드 문제다. 최소신장트리(MST)를 만들고 간선에 대해서 모든 비용을 합한다. // cmp 함수 크루스칼 알고리즘을 이용하기 위해 간선(비용)에 대해서 오름차순 정렬한다. // find_root 함수 root 찾는 함수다. 1) root가 지금 나라면 바로 리턴 2) 아니면 나의 부모로 재귀로 호출 // solution 함수 map을 이용해 연결됨을 이용했다(어차피 정점에 대해서 중복하지 않으므로) 1) init - 각 정점은 자신을 루트로 지정 2) MST가 만들어질 때까지 반복문을 돌린다(MST는 간선의 수와 ..
문제 링크 코딩테스트 연습 - 호텔 방 배정 programmers.co.kr 풀이 효율성 문제라길래 해설을 보았고 union-find 알고리즘으로 푸는 문제였다. 시간 복잡도는 O(nlogN)으로 풀어야 효율성 테스트 케이스가 풀린다고 한다. // findRoom() --- 전역 변수로 map을 선언하는 대신 참조자로 매개변수로 받아서 구현하였다. if(요구하는 방번호는 배정해도 된다) map에 요구하는 방 번호는 다음 방 번호 저장한다.(다음 방 번호를 재귀로 찾을 수 있도록) 배정 안된 것의 번호를 리턴 else(이미 배정된 것이 있다) 배정 안된 것의 번호를 찾아서 저장 map에는 배정 안된 것의 다음 번호를 저장(나중에 또 물어보면 바로 찾을 수 있도록, 순차적으로X) 배정 안된 것의 번호를 리턴..