한 문제당 30분씩은 고민하기.
왜 그렇게 풀었는지 공유하기.
하루라도 놓친다면 벌금은 1,000원
[3코1파] 2023.01.04~ (57일차)
[4코1파] 2023.01.13~ (48일차)
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도 잘 못풀면서
미쳤냐?