개인 공부/TIL

[ TIL - PGS ] 99클럽 코테 스터디 36일차 TIL + 오늘의 학습 가이드

킴도비 2024. 8. 27. 01:00

💡 오늘의 학습 키워드

  • 완전탐색

 

✅ 오늘 공부한 내용

  • 오늘의 프로그래머스 파일! 전력망을 둘로 나누기
 

프로그래머스

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

programmers.co.kr

 

 

👀 오늘의 회고

🔥 어떤 시도를 했는가?

  • 오늘의 풀이
import java.util.*;

class Solution {
    // 송전탑 간의 연결을 저장할 그래프
    List<Integer>[] graph;
    
    public int solution(int n, int[][] wires) {
        // 그래프 초기화
        graph = new ArrayList[n + 1];
        for (int i = 1; i <= n; i++) {
            graph[i] = new ArrayList<>();
        }

        // 그래프에 송전탑 연결 정보 추가
        for (int[] wire : wires) {
            int v1 = wire[0];
            int v2 = wire[1];
            graph[v1].add(v2);
            graph[v2].add(v1);
        }

        int minDifference = Integer.MAX_VALUE;

        // 각 전선을 끊어보면서 두 네트워크의 송전탑 개수 차이를 계산
        for (int[] wire : wires) {
            int v1 = wire[0];
            int v2 = wire[1];

            // 전선을 끊음
            graph[v1].remove((Integer) v2);
            graph[v2].remove((Integer) v1);

            // 끊어진 상태에서 각 네트워크의 송전탑 개수를 구함
            int sizeOfSubNetwork = bfs(v1, n);
            int difference = Math.abs(sizeOfSubNetwork - (n - sizeOfSubNetwork));

            // 최소 차이를 갱신
            minDifference = Math.min(minDifference, difference);

            // 전선을 다시 연결
            graph[v1].add(v2);
            graph[v2].add(v1);
        }

        return minDifference;
    }

    // BFS로 송전탑 개수를 셈
    private int bfs(int start, int n) {
        boolean[] visited = new boolean[n + 1];
        Queue<Integer> queue = new LinkedList<>();
        queue.offer(start);
        visited[start] = true;

        int count = 0;

        while (!queue.isEmpty()) {
            int node = queue.poll();
            count++;

            for (int neighbor : graph[node]) {
                if (!visited[neighbor]) {
                    visited[neighbor] = true;
                    queue.offer(neighbor);
                }
            }
        }

        return count;
    }
}

 

👩‍💻 내일은 무엇을 학습할 것인가?

  • 항해99문제 풀기
  • 리드미 및 main 브렌치에 합치기...
  • 원티드 인턴쉽 수업 듣기
  • 책읽기