티스토리 뷰

알고리즘

백준 2644 - 파이썬

취뽀가자!! 2023. 6. 16. 23:42

https://www.acmicpc.net/problem/2644

 

2644번: 촌수계산

사람들은 1, 2, 3, …, n (1 ≤ n ≤ 100)의 연속된 번호로 각각 표시된다. 입력 파일의 첫째 줄에는 전체 사람의 수 n이 주어지고, 둘째 줄에는 촌수를 계산해야 하는 서로 다른 두 사람의 번호가 주어

www.acmicpc.net

문제 풀이

처음에 생각해낸 방법은 예제를 보면 부모노드가 자식노드보다 값이 작게 입력되어 있기에 시작한 값보다 노드가 작을때 부모 노드라 판단하고 조건문을 걸었다. 예제는 모두 맞았지만 오답 처리를 받았다.

 

import sys
from collections import deque
input = sys.stdin.readline

n = int(input())
start, end = map(int,input().split())
m = int(input())

graph = [[] for _ in range(n+1)]
visited = [False] * (n+1)

for _ in range(m):
  a,b = map(int,input().split())
  graph[a].append(b)
  graph[b].append(a)

dx = [-1,1,0,0]
dy = [0,0,-1,1]

def bfs(start, end):
  q = deque()
  q.append(start)
  visited[start] = True

  cnt = 0


  while q:
    v = q.popleft()

    if v == end:
      return cnt
  
    for i in graph[v]:
      if not visited[i] and i < start: 
        visited[i] = True
        q.append(i)
        cnt += 1

  return -1

print(bfs(start,end))

그래서 다른 사람들의 풀이를 보니 촌수는 노드간의 거리와 같기 때문에 방문 처리 단계에서 1씩 증가하여 저장하는 방법으로 문제를 풀었다.

 

import sys
from collections import deque
input = sys.stdin.readline

n = int(input())
start, end = map(int,input().split())
m = int(input())

graph = [[] for _ in range(n+1)]
result = [0] * (n+1)

for _ in range(m):
  a,b = map(int,input().split())
  graph[a].append(b)
  graph[b].append(a)

dx = [-1,1,0,0]
dy = [0,0,-1,1]

def bfs(start):
  q = deque()
  q.append(start)

  while q:
    v = q.popleft()
    # print(v, end=" ") # 2 1 3 2
    
    for i in graph[v]:
      if not result[i]:
        # print(i, end =" ") # 1 3 2
        result[i] = result[v] + 1
        q.append(i)

bfs(start)
# print(graph)
# print(result)
print(result[end] if result[end] > 0 else -1)

느낀점

 오답 처리를 받은 코드도 사실 조금만 더 시간을 들여 다듬었다면 정답을 받을 수 있었을거 같고, 이번 문제를 풀면서 시작노드를 기준으로 각 노드간의 거리를 구하는 방법을 새로 익힌거 같다.

'알고리즘' 카테고리의 다른 글

백준 1389 - 파이썬  (0) 2023.06.25
백준 17141 - 파이썬  (0) 2023.06.24
백준 2583 - 파이썬  (0) 2023.06.15
백준 11725 - 파이썬  (0) 2023.06.13
백준 2468 - 파이썬  (0) 2023.06.11
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/03   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
글 보관함