본문 바로가기

알고리즘/Lv. 3

프로그래머스 43162 네트워크 자바 풀이

728x90

난이도 : Lv. 3

풀이일 : 2410185

https://school.programmers.co.kr/learn/courses/30/lessons/43162

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


문제


아이디어

  • 현재 컴퓨터가 네트워크에 연결되어 있는 지 확인할 boolean 타입의 check 배열을 생성
  • 반복문을 돌며 현재 컴퓨터가 네트워크에 연결되어 있지 않다면, 현재 컴퓨터부터 연결된 것들 BFS 탐색
  • 최종적으로 네트워크 개수 출력

풀이

import java.util.LinkedList;
import java.util.Queue;

class Solution {
    public int solution(int n, int[][] computers) {
        int answer = 0;
        boolean[] check = new boolean[n];
        Queue<Integer> queue = new LinkedList<>();
        
        for (int i = 0; i < n; i++) {
            if (!check[i]) {
                answer += 1;
                queue.add(i);
                while (!queue.isEmpty()) {
                    int x = queue.poll();
                    for (int nx = 0; nx < n; nx++) {
                        if (computers[x][nx] > 0 && !check[nx]) {
                            queue.add(nx);
                            check[nx] = true;
                        }
                    }
                }
            }
        }
        return answer;
    }
}
  • check : 각 컴퓨터의 네트워크 연결 여부 파악
  • queue : 각 네트워크에 연결된 컴퓨터 파악에 사용할 큐
  • 모든 컴퓨터의 개수만큼 반복하며, 현재 컴퓨터가 네트워크에 연결되어 있는지 파악
  • 연결되어 있지 않다면, 현재 컴퓨터를 시작으로 네트워크 파악, answer + 1
  • 연결되어 있지 않은 컴퓨터 번호를 queue에 추가
  • queue에 남아있는 요소가 없을 때까지, computers 배열을 이용하여 현재 네트워크에 연결된 컴퓨터 파악
  • computers 배열로 확인하여 현재 네트워크에 연결된 컴퓨터는 queue에 추가, check 재할당
  • 반복문 종료 후 네트워크 개수 반환

느낀점

  • 파이썬으로 BFS 문제를 좋아했어서 자바로도 쉽게 풀린다. 다만, 조건 설정에서 에러가 발생해서 코드를 쭉 작성하고 에러를 보며 고치는 시간을 가졌다.
  • nx in computers[x] 이런 식으로 작성했다가 고친다던지, if (nx) 이런식으로 작성했다가 고치는 작업이 필요했다.
  • 얼른 자바에 익숙해져야지