[프로그래머스] 43162 네트워크(Lv.3) - BFS

2024. 8. 8. 03:00·코딩 테스트/알고리즘

문제

네트워크

  • 예제1
  • 예제2

코드

시도 1 - X

computers가 2차원 배열이라서 단순히 1인 노드가 연결된 뭉치의 개수를 구하는 문제로 잘못 이해했다.
시도 2로...

import java.util.*;
class Solution {

    boolean[][] visited;
    int[] dx = {1, -1, 0, 0};
    int[] dy = {0, 0, 1, -1};
    public int solution(int n, int[][] computers) {
        visited = new boolean[n][n];
        int cnt = 0;
        for (int i = 0; i < computers.length; i++) {
            for (int j = 0; j < computers[0].length; j++) {
                if (computers[i][j] == 1 && !visited[i][j]) {
                    // q.offer(new int[] {i, j});
                    visited[i][j] = true;
                    bfs(computers, i, j);
                    cnt++;
                }
            }
        }
        return cnt;
    }

    public void bfs(int[][] computers, int x, int y) {
        Queue<int[]> q = new LinkedList<>();
        q.offer(new int[] {x, y});
        while (!q.isEmpty()) {
            int[] current = q.poll();
            for (int i = 0; i < 4; i++) {
                int cx = current[0] + dx[i];
                int cy = current[1] + dy[i];

                if (cx >= 0 && cx < computers.length && cy >= 0 && cy < computers[0].length) {
                    if (computers[cx][cy] == 1 && !visited[cx][cy]) {
                        q.offer(new int[] {cx, cy});
                        visited[cx][cy] = true;
                    }
                }
            }
        }
    }
}

시도 2 - O

computers[행][열]의 행이 각 컴퓨터이고 열은 해당 행과의 연결 여부를 표현한 값이다.(1: 연결O, 0: 연결X)
즉, [[1, 1, 0], [1, 1, 0], [0, 0, 1]]인 경우 1과 2가 연결되어 있고 1과 3은 연결되지 않았다. 2와 1이 연결되어 있고 2와 3은 연결되지 않았다. 3은 1, 2와 연결되지 않았다. 결국 아래 사진과 같이 된다.

이를 코드에 적용하면 노드는 총 n개만 존재하므로 visited 배열을 2차원 배열이 아닌 크기가 n인 1차원 배열로 선언하면 되고 큐 또한 각 노드의 좌표가 아닌 노드 자체를 저장해야 하기 때문에 Integer 자료형으로 선언한다.

boolean[] visited = new boolean[n];
Queue<Integer> q = new LinkedList<>();

나머지 코드는 기존의 BFS 풀이 방식과 동일하다.

import java.util.*;
class Solution {
    boolean[] visited;
    public int solution(int n, int[][] computers) {
        visited = new boolean[n];
        int cnt = 0;
        for (int i = 0; i < computers.length; i++) {
            if (!visited[i]) {
                visited[i] = true;
                bfs(computers, i);
                cnt++;
            }
        }
        return cnt;
    }

    public void bfs(int[][] computers, int node) {
        Queue<Integer> q = new LinkedList<>();
        q.offer(node);
        while (!q.isEmpty()) {
            int current = q.poll();

            for (int i = 0; i < computers[current].length; i++) {
                if (computers[current][i] == 1 && !visited[i]) {
                    q.offer(i);
                    visited[i] = true;
                }
            }

        }
    }
}

후기

문제만 이해하면 매우 쉬운 문제이다. 그런데 문제를 잘못 이해해서 한참을 헤멨다 .... 잘 좀 보자

'코딩 테스트 > 알고리즘' 카테고리의 다른 글

[백준] 14226 이모티콘(Gold.4) - BFS  (0) 2024.08.09
[백준] 17086 아기 상어2(Silver.2) - BFS  (0) 2024.08.08
[백준] 7576 토마토(Gold.5) - BFS  (0) 2024.08.08
[프로그래머스] 1844 게임 맵 최단거리 (Lv.2) - BFS  (0) 2024.08.07
[프로그래머스] 43165 타겟넘버(Lv.2) - DFS, BFS  (0) 2024.08.07
'코딩 테스트/알고리즘' 카테고리의 다른 글
  • [백준] 14226 이모티콘(Gold.4) - BFS
  • [백준] 17086 아기 상어2(Silver.2) - BFS
  • [백준] 7576 토마토(Gold.5) - BFS
  • [프로그래머스] 1844 게임 맵 최단거리 (Lv.2) - BFS
토자맨
토자맨
  • 토자맨
    개발하는 토자맨
    토자맨
  • 전체
    오늘
    어제
    • 개발 공부
      • 코딩 테스트
        • 코드업 기초 100제
        • 백준
        • 99클럽
        • 자료구조
        • 알고리즘
      • Programming Language
        • 자바(JAVA)
      • Back-end
        • Spring
      • Front-end
        • html
        • css
      • DevOps
        • AWS
        • CI CD
        • Docker
        • 홈서버
        • Git
      • Computer Science
        • 자료구조
        • 알고리즘
        • 운영체제
        • OS,Network,DB,DesignPattern
      • 프로젝트
        • 웨이트 쇼핑몰
      • 공부 로드맵
        • 2학년 겨울방학
        • 3학년 2학기
        • 3학년 겨울방학
      • 일상
        • 기타 정보
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    nvidia container toolkit #
    스프링핵심원리 #김영한 #의존관계자동주입 #의존관계 자동 주입
    bfs #최단거리탐색 #프로그래머스
    싱글톤 패턴 #싱글톤 컨테이너 #싱글톤 레지스트리 #싱글톤 객체 상태 #무상태 #stateless #유지상태 #staleful
    nvidia-docker #docker cuda #docker gpu #엔비디아 도커
    오블완
    이진탐색 #이분탐색 #알고리즘
    이진탐색 #이분탐색 #백준
    백준 #dp #동적계획법
    백준 #bfs
    백준 #아기상어2 #bfs
    프로그래머스 #dfs
    백준 #dfs #11725번
    dfs #백준
    티스토리챌린지
    git filter-branch #commit 수정 #commit
    프로그래머스 #dp
    99클럽 #코딩테스트 준비 #개발자 취업 #항해99 #til
    백준 #이진탐색 #이분탐색
    dfs #알고리즘
    ec2 멈춤 #ec2 터짐 #ec2 ssh 연결 끊김 #ec2 끊김
    dp #백준 #동적계획법
    solid #객체지향설계원칙
    스프링 #spring #스프링 컨테이너 #스프링 컨텍스트
    백준 #dfs #알고리즘
    백준 #dfs
    git filter-repo
    피보나치 수 #백준 #dp
    bfs #프로그래머스
    bfs #백준
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
토자맨
[프로그래머스] 43162 네트워크(Lv.3) - BFS
상단으로

티스토리툴바