ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป ๋ฌธ์ œ

 

3182๋ฒˆ: ํ•œ๋™์ด๋Š” ๊ณต๋ถ€๊ฐ€ ํ•˜๊ธฐ ์‹ซ์–ด!

H-ALGO ํšŒ์›์ธ ํ•œ๋™์ด๋Š” ๊ณต๋ถ€ํ•˜๋Š”๊ฒƒ์„ ์ข‹์•„ํ•˜์ง€ ์•Š๋Š”๋‹ค. ํ•˜์ง€๋งŒ ์•ฝ์‚ญ๋น ๋ฅด๊ฒŒ๋„ ํ•œ๋™์ด๋Š” ๊ณต๋ถ€๋„ ํ•˜์ง€ ์•Š์œผ๋ฉด์„œ ์–ด๋ ค์šด ์‹œํ—˜์„ ํ†ต๊ณผํ•˜๊ณ  ์‹ถ์–ดํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋˜ ์™€์ค‘ ์–ด๋Š ๋‚ , ํ•œ๋™์ด์˜ ๋™๊ธฐ๊ฐ€ ํ•œ๋™์ด์—

www.acmicpc.net


โœ๐Ÿป ํ’€์ด

๐ŸŽจ Go

// https://www.acmicpc.net/problem/3182
package main

import (
	"bufio"
	"fmt"
	"os"
)

var (
	graph   []int
	visited []bool
)

func main() {
	reader := bufio.NewReader(os.Stdin)
	writer := bufio.NewWriter(os.Stdout)
	defer writer.Flush()

	var n int
	fmt.Fscanln(reader, &n)

	graph = make([]int, n+1)
	visited = make([]bool, n+1)
	for i := 0; i < n; i++ {
		var response int
		fmt.Fscanln(reader, &response)
		graph[i+1] = response
	}

	var maxContacts int
	var whoToContact = n + 1
	for i := 1; i < n+1; i++ {
		var numOfContacts int
		if graph[i] != 0 {
			visited[i] = true
			numOfContacts = dfs(graph[i], numOfContacts)
		}
		if numOfContacts > maxContacts {
			maxContacts = numOfContacts
			whoToContact = i
		} else if numOfContacts == maxContacts {
			if whoToContact > i {
				whoToContact = i
			}
		}
		initVisited()
	}
	fmt.Fprintln(writer, whoToContact)
}

func dfs(start int, numOfContacts int) int {
	visited[start] = true
	numOfContacts++
	if graph[graph[start]] != 0 && !visited[graph[start]] {
		numOfContacts = dfs(graph[start], numOfContacts)
	}
	return numOfContacts
}

func initVisited() {
	for i := 0; i < len(visited); i++ {
		visited[i] = false
	}
}

๐ŸŽจ Python3

# https://www.acmicpc.net/problem/3182
import sys

graph = []
visited = []

def dfs(start, num_of_contacts):
    global graph
    global visited
    visited[start] = True
    num_of_contacts += 1
    if graph[graph[start]] != 0 and not visited[graph[start]]:
        num_of_contacts = dfs(graph[start], num_of_contacts)
    return num_of_contacts

def init_visited():
    global visited
    for i in range(len(visited)):
        visited[i] = False

if __name__ == "__main__":
    n = int(sys.stdin.readline())
    graph = [0 for i in range(n+1)]
    visited = [False for i in range(n+1)]
    for i in range(n):
        response = int(sys.stdin.readline())
        graph[i+1] = response

    max_contacts = 0
    who_to_contact = n+1
    for i in range(n+1):
        num_of_contacts = 0
        if graph[i] != 0:
            visited[i] = True
            num_of_contacts = dfs(graph[i], num_of_contacts)
        if num_of_contacts > max_contacts:
            max_contacts = num_of_contacts
            who_to_contact = i
        elif num_of_contacts == max_contacts:
            if who_to_contact > i:
                who_to_contact = i
        init_visited()
    print(who_to_contact)
728x90
๋Œ“๊ธ€