[프로그래머스, Java] 네트워크

2025. 8. 26. 17:08·CodingTest/Programmers

사진을 클릭하면 해당 문제로 이동

💡풀이 1

- node 클래스를 만들어서 풀이

import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Deque;
import java.util.List;

class Solution {
    class Node {
        String name;
        List<Node> links = new ArrayList<>();
        boolean visited = false;

        Node(String name) {
            this.name = name;
        }

        private List<Node> getLinks() {
            return this.links;
        }

        private void link(Node node) {
            this.links.add(node);
        }

        private boolean isVisited() {
            return visited;
        }

        private void visit() {
            this.visited = true;
        }
    }

    public int solution(int n, int[][] computers) {

        List<Node> nodes = new ArrayList<>();

        for(int i = 0; i < n; i++) {
            nodes.add(new Node(String.valueOf(i)));
        }

        for(int i = 0; i < n; i++) {
            for(int j = 0; j < n; j++) {
                if(i != j && computers[i][j] == 1) {
                    nodes.get(i)
                            .link(nodes.get(j));
                }
            }
        }

        int answer = 0;
        for(Node node : nodes) {
            if(node.isVisited()) {
                continue;
            }

            answer++;
            dfs(node);
        }

        return answer;

    }


    public void dfs(Node startNode) {
        Deque<Node> stack = new ArrayDeque<>();
        stack.push(startNode);

        while(!stack.isEmpty()) {
            Node node = stack.pop();
            if(node.isVisited()) {
                continue;
            }

            node.visit();

            for(Node link : node.getLinks()) {
                if(!link.isVisited()) {
                    stack.push(link);
                }
            }

        }
    }
}

💡풀이 2

- node 클래스 없이 visited 배열을 사용하여 풀이

import java.util.ArrayDeque;
import java.util.Queue;

class Solution {
    public int solution(int n, int[][] computers) {

        boolean[] visited = new boolean[n];
        int answer = 0;

        for(int i = 0; i < n; i++) {
            if(visited[i]) {
                continue;
            }
            answer++;
            bfs(computers, visited, i);
        }
        return answer;
    }

    void bfs(final int[][] computers, boolean[] visited, int node) {
        Queue<Integer> queue = new ArrayDeque<>();
        queue.offer(node);

        while(!queue.isEmpty()) {
            int now = queue.poll();
            visited[now] = true;

            for(int i = 0; i < computers[now].length; i++) {
                if(visited[i]) {
                    continue;
                }
                if(now != i && computers[now][i] == 1) {
                    queue.offer(i);
                }
            }
        }
    }
}

'CodingTest > Programmers' 카테고리의 다른 글

[프로그래머스, Java] 단어 변환  (0) 2025.08.28
[프로그래머스, Java] 게임 맵 최단거리  (0) 2025.08.26
[프로그래머스, Java] 의상  (0) 2025.08.19
[프로그래머스, Java] 달리기 경주  (0) 2025.07.29
[프로그래머스, Java] 유연근무제  (0) 2025.07.29
'CodingTest/Programmers' 카테고리의 다른 글
  • [프로그래머스, Java] 단어 변환
  • [프로그래머스, Java] 게임 맵 최단거리
  • [프로그래머스, Java] 의상
  • [프로그래머스, Java] 달리기 경주
devoks
devoks
꾸준히 작성해보자!
  • devoks
    ok's 개발 블로그
    devoks
  • 전체
    오늘
    어제
    • 분류 전체보기 (121)
      • Backend (17)
        • SpringBoot (0)
        • Java (17)
      • Cs (20)
      • Infra (0)
        • AWS (0)
        • Docker (0)
      • CodingTest (84)
        • Programmers (84)
  • 링크

    • My GitHub
  • 인기 글

  • 태그

    dfs
    BufferedReader
    CS
    effectivejava
    BufferedWriter
    programmers
    java
    BFS
    codingtest
    switch
  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
devoks
[프로그래머스, Java] 네트워크
상단으로

티스토리툴바