[4코1파] 4명의 안드로이드 개발자와 1명의 파이썬 개발자의 코딩 테스트 서막 : 4코1파

Rule :

하루에 1문제씩 풀기.

한 문제당 30분씩은 고민하기.
왜 그렇게 풀었는지 공유하기.
하루라도 놓친다면 벌금은 1,000원

START :

[3코1파] 2023.01.04~ (57일차)
[4코1파] 2023.01.13~ (48일차)

Today :

2023.03.01 [57일차]

프로그래머스 LV3
네트워크
https://school.programmers.co.kr/learn/courses/30/lessons/43165

문제 설명

네트워크란 컴퓨터 상호 간에 정보를 교환할 수 있도록 연결된 형태를 의미합니다. 예를 들어, 컴퓨터 A와 컴퓨터 B가 직접적으로 연결되어있고, 컴퓨터 B와 컴퓨터 C가 직접적으로 연결되어 있을 때 컴퓨터 A와 컴퓨터 C도 간접적으로 연결되어 정보를 교환할 수 있습니다. 따라서 컴퓨터 A, B, C는 모두 같은 네트워크 상에 있다고 할 수 있습니다.
컴퓨터의 개수 n, 연결에 대한 정보가 담긴 2차원 배열 computers가 매개변수로 주어질 때, 네트워크의 개수를 return 하도록 solution 함수를 작성하시오.

제한사항

컴퓨터의 개수 n은 1 이상 200 이하인 자연수입니다.
각 컴퓨터는 0부터 n-1인 정수로 표현합니다.
i번 컴퓨터와 j번 컴퓨터가 연결되어 있으면 computers[i][j]를 1로 표현합니다.
computer[i][i]는 항상 1입니다.

입출력 예

입출력 예 설명

예제 #1
아래와 같이 2개의 네트워크가 있습니다.

예제 #2
아래와 같이 1개의 네트워크가 있습니다.

풀이방법

골때리네..

bfs 구현시 바로나오는 주어진 길이 만큼
False 리스트를 만들고 (방문 노드)
방문노드를 체크해가면서 bfs를 구현한다.
그러나, ! 네버더레스
방문하지 않은 노드를 대상으로 dfs를 재귀함수로 구현해줄 때,
뭉쳐있는 하나의 노드로 생각하고 count를 해줘야 하는 구현을 못해서 애먹었음
무려 3시간을 태웠지만 구현 못한 나 레전드
남의 코드봐도 이해안되는 나 레전드
아직 렙2 인생임.. 렙 3으로 가지말자고 눈 똑바로 뜨라고

증빙

내 코드

def solution(n, computers):
    answer = 0
    visited = [False for _ in range(n)]
    for com in range(n):
        if visited[com] == False:
            dfs(n, computers, com, visited)
            answer += 1
    return answer

def dfs(n, computers, com, visited):
    visited[com] = True
    for con in range(n):
        if con != com and computers[com][con] == 1:
            if visited[con] == False:
                dfs(n, computers, con, visited)

다른 사람 풀이

플로이드-워셜? 그뭔씹.. 그거 뭔데 어떻게 하는건데

https://chanhuiseok.github.io/posts/algo-50/

여담

일부러 dfs,bfs 이해해보려고 해당 파트에서 골랐는데
3시간 써도 안풀려서 구글링 해도 이해가 안됐다
그 이유 렙 3이었음.. 렙 3인거 이제 봄
나 레전드.. 이제 렙 2도 잘 못풀면서
미쳤냐?

profile
꿈꾸는 것도 개발처럼 깊게

0개의 댓글