Early Riser
생각정리
Early Riser
전체 방문자
오늘
어제
  • 분류 전체보기 (128)
    • JS (19)
    • React (33)
    • React Native (2)
    • Library, Tool (13)
    • CSS (2)
    • Algorithm (40)
    • Computer Science (3)
    • 회고 (3)
    • AI (13)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 글쓰기

공지사항

인기 글

태그

  • useState
  • 오늘의불경
  • boosting
  • RNN
  • 자바스크립트
  • 완전탐색
  • 딥러닝
  • 프로그래머스
  • 알고리즘
  • local minima
  • 부스트캠프 합격
  • dfs
  • global minima
  • 구현
  • 백준
  • LGBM
  • javascript
  • react
  • BFS
  • 부스트캠프 9기
  • 밑바닥
  • lightgbm
  • 부스트캠프 합격 후기
  • useEffect
  • 논문리뷰
  • 손실함수
  • js
  • 파이썬
  • 비동기
  • 백트래킹

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Early Riser

생각정리

프로그래머스: 네트워크 (파이썬, DFS)
Algorithm

프로그래머스: 네트워크 (파이썬, DFS)

2022. 12. 14. 14:15

비교적 쉬운 난이도의 문제였다. DFS를 통해 그래프를 탐색하는 전형적인 문제였기 때문이다. LV3에서 정답률이 높은 문제가 LV2에서 정답률이 낮은 문제보다 쉬운 것 같다..

먼저 두 노드간에 간선 유무를 2차원 배열을 통해서 알려주는데 인접 행렬을 이용해서 그래프를 표현한다. 그래프를 표현하는데는 인접 리스트와 인접 행렬이 있는데 난 인접 행렬을 선호하고 그 중에서도 본 문제풀이와 같이 부모, 자식을 각각의 인덱스에 해당하는 리스트에 넣어서 구현하는 방법을 선호한다.

 

문제풀이 코드는 다음과 같다.

def dfs(node, graph, visited):
    visited[node] = True
    for child in graph[node]:
        if not visited[child]:
            dfs(child, graph, visited)


def solution(n, computers):
    answer = 0
    graph = [[] for _ in range(n)]
    # 인접 행렬 구현
    for i in range(len(computers)):
        for j in range(len(computers[0])):
            if computers[i][j] == 1:
                if i not in graph[j]:
                    graph[j].append(i)
                if j not in graph[i]:
                    graph[i].append(j)
    # 방문 여부 배열
    visited = [False for __ in range(n)]
    for k in range(n):
        if not visited[k]:
            dfs(k, graph, visited)
            answer += 1
    return answer

인접행렬에서 DFS로 탐색을 하면 연결되어 있는 노드들은 모두 방문하게 된다.

Boolean 배열을 통하여 한번 방문한 곳은 다시 방문하지 않게 하고 DFS로 탐색을 할때마다 네트워크 하나를 탐색하는 것이므로 정답에 1을 더해주면 된다.

'Algorithm' 카테고리의 다른 글

프로그래머스: 여행 경로 (파이썬, DFS, 백트래킹)  (0) 2022.12.15
프로그래머스: 단어 변환 (파이썬, BFS)  (0) 2022.12.14
프로그래머스: 게임 맵 최단거리(파이썬, DFS, BFS)  (0) 2022.12.14
프로그래머스: 햄버거 만들기(파이썬, 스택)  (0) 2022.12.05
프로그래머스: 문자열 나누기 (파이썬, 반복문)  (0) 2022.12.05
    'Algorithm' 카테고리의 다른 글
    • 프로그래머스: 여행 경로 (파이썬, DFS, 백트래킹)
    • 프로그래머스: 단어 변환 (파이썬, BFS)
    • 프로그래머스: 게임 맵 최단거리(파이썬, DFS, BFS)
    • 프로그래머스: 햄버거 만들기(파이썬, 스택)
    Early Riser
    Early Riser
    2년차 프론트엔드 개발자입니다. https://github.com/EarlyRiser42

    티스토리툴바