deo2kim
맞왜틀
deo2kim
전체 방문자
오늘
어제
  • 분류 전체보기
    • CS
      • Algorithm
      • Data Structure
      • Network
      • DB
      • OS
    • Algorithm Problem
      • Python
      • JavaScript
    • Programming language
      • Python
      • JavaScript
    • Tool
      • Jquery
      • React
    • 개발
    • Infra

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

최근 댓글

최근 글

티스토리

반응형
hELLO · Designed By 정상우.
deo2kim

맞왜틀

[python] 백준 - 2644. 촌수계산
Algorithm Problem/Python

[python] 백준 - 2644. 촌수계산

2020. 5. 21. 23:42
반응형

문제 해결

1. 노드간의 최단거리를 구하는 그래프에 관한 기본적인 문제이다.

2. 먼저 주어진 부모자식들 간의 관계를 가지고 인접리스트를 만든다.

3. visit 배열을 만들어 방문 여부를 가지고 DFS 재귀함수를 진행한다.

 (1) 현재 노드에 인접한 노드를 for문을 통해 뽑아주고,

 (2) 만약 인접한 노드가 아직 방문하지 않은 상태라면, 그 노드로 이동 - 재귀

 (3) 이동한 노드가 구해야하는 노드라면 방문한 노드들의 갯수를 세어주고 결론을 도출.

 

-> 쉬운 문제라고 생각했는데 한참동안 '틀렸습니다'를 얻었다. 이번에도 역시 이웃님의 도움을 받았다.

 `촌수관계를 나타내지 못하면 -1을 출력해라`....... 문제를 잘 읽어보는 습관을 들여야겠다.

소스 코드

n = int(input())
a, b = map(int, input().split())
m = int(input())


def dfs(vertex):
    global result
    if result > 0:  # a -> b 까지 도착했으므로 result 의 값이 변했다. 결과가 나왔기에 다른 모든 함수를 종료
        return

    if vertex == b:  # a -> b 까지 도착
        result = visit.count(True) - 1  # 촌수는 배열의 길이에서 -1 | ex) 나-아빠-할아버지 : 2촌
        return

    for neighbor in adj[vertex]:  # 현재노드와 인접한 노드 중에서
        if visit[neighbor] is False:  # 방문하지 않은 노드가 있으면
            visit[neighbor] = True  # 방문
            dfs(neighbor)  # 노드를 들고 다시 dfs
            visit[neighbor] = False  # 원하는 값에 도달하지 못하고 나오면 방문 목록에서 제거

    return


# 그래프 문제의 기본!! 인접xx 중 하나 작성하기, 여기서는 인접리스트 사용
adj = [[] for _ in range(n+1)]
for _ in range(m):  # 방향이 없는 그래프이므로 s->e, e->s 둘다 넣어준다.
    s, e = map(int, input().split())
    adj[s].append(e)
    adj[e].append(s)

result = -1  # 촌수를 따질 수없을 때는 -1 이므로 -1로 두고 시작
visit = [False]*(n+1)  # 방문했는지 아닌지를 확인하기 위해 visit 배열 사용 ( 나중에 이 배열의 길이로 촌수를 계산 )
visit[a] = True  # a 를 시작으로 두고
dfs(a)  # dfs 함수시작!

print(result)

출처 : BACKJOON ONLINE JUDGE

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

 

2644번: 촌수계산

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

www.acmicpc.net

 

반응형
저작자표시 비영리 변경금지 (새창열림)

'Algorithm Problem > Python' 카테고리의 다른 글

[python] 백준 - 7568. 덩치  (0) 2020.05.25
[python] 백준 - 1922. 네트워크 연결  (3) 2020.05.22
[python] 백준 - 17142. 연구소 3 (삼성 SW 역량 테스트 기출 문제)  (0) 2020.05.20
[python] 백준 - 14499. 주사위 굴리기(삼성 SW 역량 테스트 기출 문제)  (0) 2020.05.19
[python] 백준 - 17144. 미세먼지 안녕!(삼성 SW 역량 테스트 기출 문제)  (2) 2020.05.18
    'Algorithm Problem/Python' 카테고리의 다른 글
    • [python] 백준 - 7568. 덩치
    • [python] 백준 - 1922. 네트워크 연결
    • [python] 백준 - 17142. 연구소 3 (삼성 SW 역량 테스트 기출 문제)
    • [python] 백준 - 14499. 주사위 굴리기(삼성 SW 역량 테스트 기출 문제)
    deo2kim
    deo2kim
    코딩 기록하기

    티스토리툴바