99클럽 코테 스터디 36일차 전력망을 둘로 나누기

2024. 8. 27. 10:35·스터디/99클럽 코테 스터디 TIL
목차
  1. 📝 문제
  2. 🔥 시도해본 접근 방식
  3. ✨ 성공 코드

📝 문제

 

프로그래머스

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

programmers.co.kr

🔥 시도해본 접근 방식

1. 모든 wire가 한번씩 끊어진 상황을 탐색하기 위한 반복문 선언

2. [1]의 반복문 안에서 끊어진 wire에 붙어있던 첫번째 송전탑을 기준삼아 송전탑에 연결되어 있는 송전탑의 개수를 dfs를 이용하여 구한다.

3. [2]에서 구한 연결된 송전탑 개수를 group1로 선언하고 group2는 전체 송전탑 - group1 으로 구한다.

4. group1과 group2의 차이를 answer와 비교하여 더 작은 값으로 초기화하도록 한다.

✨ 성공 코드

import java.util.Stack;

class Solution {
    public int solution(int n, int[][] wires) {
        int answer = n;

        // 전체 wire가 한번씩 끊어진 경우 순회
        for (int i = 0; i < wires.length; i++) {
            int[] cutWire = wires[i]; // 끊어진 wire

            // wire가 끊어진 송전탑과 연결된 송전탑을 찾아 stack에 넣을 때,
            // 중복 방지를 위한 플래그
            boolean[] linked = new boolean[n + 1];
            Stack<Integer> s = new Stack<>();

            // 첫 순회 송전탑 push
            s.push(cutWire[0]);
            linked[cutWire[0]] = true;

            int cnt = 0;

            while (!s.isEmpty()) {
                int top = s.pop();
                cnt++;

                // 끊어진 wire를 제외한 모든 wire 순회하며
                // 첫 순회 송전탑과 연결된 송전탑을 stack에 추가
                for (int j = 0; j < wires.length; j++) {
                    if (i == j) continue;

                    if (wires[j][0] == top && !linked[wires[j][1]]) {
                        s.push(wires[j][1]);
                        linked[wires[j][1]] = true;
                    } else if (wires[j][1] == top && !linked[wires[j][0]]) {
                        s.push(wires[j][0]);
                        linked[wires[j][0]] = true;
                    }
                }
            }

            int group1 = cnt;
            int group2 = Math.abs(n - cnt);

            answer = Math.min(answer, Math.abs(group1 - group2));
        }

        return answer;
    }
}

'스터디 > 99클럽 코테 스터디 TIL' 카테고리의 다른 글

99클럽 코테 스터디 38일차 디펜스 게임  (0) 2024.08.29
99클럽 코테 스터디 37일차 부등호  (0) 2024.08.28
99클럽 코테 스터디 35일차 게임 맵 최단거리  (0) 2024.08.25
99클럽 코테 스터디 34일차 타겟 넘버  (0) 2024.08.25
99클럽 코테 스터디 33일차 리코쳇 로봇  (0) 2024.08.24
  1. 📝 문제
  2. 🔥 시도해본 접근 방식
  3. ✨ 성공 코드
'스터디/99클럽 코테 스터디 TIL' 카테고리의 다른 글
  • 99클럽 코테 스터디 38일차 디펜스 게임
  • 99클럽 코테 스터디 37일차 부등호
  • 99클럽 코테 스터디 35일차 게임 맵 최단거리
  • 99클럽 코테 스터디 34일차 타겟 넘버
Been
Been
  • Been
    Been
    Been
  • 전체
    오늘
    어제
    • 분류 전체보기 (60)
      • 언어 (0)
        • Kotlin (0)
      • 안드로이드 (17)
      • iOS (3)
      • Git (1)
      • 스터디 (39)
        • 알고리즘 문제 풀이 (1)
        • 99클럽 코테 스터디 TIL (38)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    자바
    IOS
    코딩테스트준비
    RecyclerView
    안드로이드
    Git
    FragmentStateAdapter
    99클럽
    EditText
    밑줄제거
    Androiod
    쓰기권한
    WRITE EXTERNAL
    객체변환
    TIL
    아이폰
    java
    풀이실패
    리싸이클러뷰
    maxWidth
    nsl
    깃
    NSR
    Android
    AndroidID
    항해99
    debugRuntimeClasspath
    Coroutines
    언더라인 제거
    개발자취업
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
Been
99클럽 코테 스터디 36일차 전력망을 둘로 나누기
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.