[Python] BOJ / 9466번 / 텀 프로젝트

2022. 6. 24. 11:21·🥇 Problem Solving/Depth-First Search
 

9466번: 텀 프로젝트

이번 가을학기에 '문제 해결' 강의를 신청한 학생들은 텀 프로젝트를 수행해야 한다. 프로젝트 팀원 수에는 제한이 없다. 심지어 모든 학생들이 동일한 팀의 팀원인 경우와 같이 한 팀만 있을

www.acmicpc.net


📝 풀이

  • 팀이 만들어지기 위해선 사이클의 마지막 학생이 선택한 학생이 첫 번째 학생과 같아야 한다. 즉, 첫과 끝이 이어진 순환 사이클이 형성되어야 한다.
    • result += cycle[cycle.index(arr[x]):]
    • 위 연산을 통해 순환 사이클이 형성되는 구간부터만 팀을 구성시킬 수 있다.

💻 소스 코드

import sys

input = sys.stdin.readline
sys.setrecursionlimit(10 ** 6)

def dfs(x):
    global result

    visited[x] = True
    cycle.append(x) #현재까지의 사이클에 포함되는 학생 저장

    if visited[arr[x]]: #방문할 수 있는 곳을 모두 방문한 경우
        if arr[x] in cycle: #사이클이 가능한지 확인
            result += cycle[cycle.index(arr[x]):]   # 사이클이 형성되는 구간부터만 팀으로 구성
    else: dfs(arr[x])

for _ in range(int(input())):
    n = int(input())
    arr = [0] + list(map(int, input().split()))
    visited = [False] * (n + 1)
    result = []

    for i in range(1, n + 1):
        if not visited[i]:
            cycle = []
            dfs(i)

    print(n - len(result))
저작자표시 (새창열림)

'🥇 Problem Solving > Depth-First Search' 카테고리의 다른 글

[Python] BOJ / 1937번 / 욕심쟁이 판다  (0) 2022.06.01
[Python] BOJ / 1967번 / 트리의 지름  (0) 2022.05.17
[Python] BOJ / 2573번 / 빙산  (0) 2022.05.01
[Python] BOJ / 1707번 / 이분 그래프  (0) 2022.05.01
[Python] BOJ / 1520번 / 내리막 길  (0) 2022.04.19
'🥇 Problem Solving/Depth-First Search' 카테고리의 다른 글
  • [Python] BOJ / 1937번 / 욕심쟁이 판다
  • [Python] BOJ / 1967번 / 트리의 지름
  • [Python] BOJ / 2573번 / 빙산
  • [Python] BOJ / 1707번 / 이분 그래프
Baeg-won
Baeg-won
  • Baeg-won
    좋았다면 추억이고 나빴다면 경험이다.
    Baeg-won
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 🍃 Spring, Spring Boot
        • 스프링 프레임워크 기초
        • 스프링 핵심 원리 - 기본편
        • 자바 ORM 표준 JPA 프로그래밍 - 기본편
        • 스프링 MVC
        • 실전! 스프링 부트와 JPA 활용1 - 웹 애플리..
      • 🥑 Web Technoloy
      • 🚗 Backend Toy Project
        • 스프링 부트 게시판
        • Photogram
        • Baeg-won Clothing Gallery
      • 🥇 Problem Solving
        • Breadth-First Search
        • Depth-First Search
        • Backtracking
        • Simulation
        • Two-pointer
        • Binary Search
        • Greedy
        • Dynamic Programming
        • Minimum Spanning Tree
        • Dijkstra
        • Floyd warshall
      • ☕ Java
        • 명품 자바 에센셜
        • Applications
      • 🍦 JavaScript
        • JavaScript 기초
      • 🐧 Linux
        • 이것이 리눅스다(CentOS 8)
      • 📟 Database
        • 혼자 공부하는 SQL
      • 🧬 Data Structure
      • 🎬 HTML
      • 🎤 Tech Interview
      • 📌 etc
        • Unity 2D Raising Jelly Game
        • C++
        • 영어 쉐도잉
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Baeg-won
[Python] BOJ / 9466번 / 텀 프로젝트
상단으로

티스토리툴바