[구름톤 챌린지 #14] 작은 노드

2023. 8. 31. 20:01· 알고리즘/9oormthon Challenge
목차
  1. 문제 해결 방법

문제14. 작은 노드

 

구름LEVEL

난이도별 다양한 문제를 해결함으로써 SW 역량을 향상시킬 수 있습니다.

level.goorm.io



문제 해결 방법

오늘의 문제는 자료구조 중 하나인 그래프에 대한 기본적인 지식을 알고 있다면 어렵지 않은 문제이다.

 

그래프는 크게 두 가지 방법으로 표현할 수 있다. 바로 이차원 배열을 사용하는 방식인 인접행렬 방식과, 연결리스트를 사용하는 방식인 인접리스트 방식이다. 두 표현 방법 중 탐색에서 더 큰 효율을 보여주는 방법은 인접행렬 방식이다(단, 메모리 공간을 많이 소모한다는 단점이 있다.). 

 

그래서 이 문제에서 내가 택한 방식은 인접행렬 방식이다. 인접행렬 방식은 이차원 배열의 각 인덱스가 노드가 되고,  두 인덱스로 접근한 배열의 값이 1이면 두 노드 사이에 간선이 있음을 나타낸다. 문제를 풀 때 주의깊게 봐야하는 부분은 아래와 같다.

  • 간선은 양방향 간선이다. 따라서 배열에 값을 저장할 때, node1 -> node2 로 가는 간선과 node2 -> node1 로 가는 간선을 모두 입력해줘야한다.
  • 한번 방문한 노드는 방문할 수 없다. 따라서 이미 방문한 노드인지를 확인할 수 있도록 visited Set에 방문한 노드를 넣어주고, 탐색시에 Set을 확인하여 이미 방문한 노드인지를 체크해주어야한다.
  • 방문할 수 있는 노드 중 가장 작은 노드로 이동한다. 따라서 다음 노드로 이동할 때, 각 노드를 작은 숫자부터 순차적으로 체크하면서 다음 이동할 노드를 결정해야한다.

위 내용들을 고려하고 문제를 푼다면, 어렵지 않게 문제를 해결할 수 있다.

 

위 내용을 코드로 구현하면 아래와 같다.

import sys

n, m, k = map(int, sys.stdin.readline().split())

arr = [[0 for i in range(n + 1)] for j in range(n + 1)]

for i in range(m):
    node1, node2 = map(int, sys.stdin.readline().split())
    arr[node1][node2] = 1
    arr[node2][node1] = 1

visited = set()
visited.add(k)

count = 1
while True:
    for j in range(1, n + 1):
        if arr[k][j] == 1:
            if j not in visited:
                visited.add(j)
                count += 1

                k = j
                break
    else:
        break

print(count, k)

'알고리즘 > 9oormthon Challenge' 카테고리의 다른 글

[구름톤 챌린지 #16] 연합  (0) 2023.09.04
[구름톤 챌린지 #15] 과일 구매  (0) 2023.09.01
[구름톤 챌린지 #13] 발전기 (2)  (0) 2023.08.30
[구름톤 챌린지 #12] 발전기  (0) 2023.08.29
[구름톤 챌린지 #11] 통증 (2)  (0) 2023.08.28
  1. 문제 해결 방법
'알고리즘/9oormthon Challenge' 카테고리의 다른 글
  • [구름톤 챌린지 #16] 연합
  • [구름톤 챌린지 #15] 과일 구매
  • [구름톤 챌린지 #13] 발전기 (2)
  • [구름톤 챌린지 #12] 발전기
young_and_mini
young_and_mini
young_and_mini
난아직어리고작아
young_and_mini
전체
오늘
어제
  • 분류 전체보기 (26)
    • 알고리즘 (24)
      • 백준(BOJ) (4)
      • 9oormthon Challenge (20)
    • 프로그래밍 언어 (2)
      • Python (2)
      • Java (0)
    • CS 전공지식 (0)
    • 백엔드 개발 (0)
    • 프론트엔드 개발 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • BFS
  • 구현
  • dfs
  • dp
  • 그래프
  • 구름톤트레이닝
  • 문자열
  • 후기
  • 구름톤챌린지
  • 투포인터
  • 시뮬레이션
  • 완전탐색
  • shallow copy
  • 그리디
  • Python
  • deep copy

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.0
young_and_mini
[구름톤 챌린지 #14] 작은 노드
상단으로

티스토리툴바

단축키

내 블로그

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

블로그 게시글

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

모든 영역

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

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