ํฐ์คํ ๋ฆฌ ๋ทฐ
dev/algorithm
BOJ / 3182๋ฒ / ํ๋์ด๋ ๊ณต๋ถ๊ฐ ํ๊ธฐ ์ซ์ด! [Go][Python3]
crscnt 2020. 12. 26. 21:00๐ฉ๐ป๐ป ๋ฌธ์
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
'dev > algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
BOJ / 2630๋ฒ / ์์ข ์ด ๋ง๋ค๊ธฐ [Go][Python3] (0) | 2020.12.28 |
---|---|
BOJ / 5635๋ฒ / ์์ผ [Go][Python3] (0) | 2020.12.27 |
BOJ / 10708๋ฒ / ํฌ๋ฆฌ์ค๋ง์ค ํํฐ [Go][Python3] (0) | 2020.12.25 |
BOJ / 4573๋ฒ / Pizza Pricing [Go][Python3] (0) | 2020.12.22 |
BOJ / 1392๋ฒ / ๋ ธ๋ ์ ๋ณด [Go][Python3] (0) | 2020.12.19 |
๋๊ธ
๊ธ ๋ณด๊ดํจ
์ต๊ทผ์ ๋ฌ๋ฆฐ ๋๊ธ
TAG
- ๋ฐฑ์ค
- Algorithm
- go
- python3
- ์๊ฐ๊ต์ฒด
- ๋ถํ ์ ๋ณต
- Golang
- ballet
- java
- ๋ธ๋ฃจํธํฌ์ค
- ์๋ฐ
- ์๊ณ ๋ฆฌ์ฆ
- ๋งฅ๋ถ
- dfs
- BOJ
- baekjoon
- AWS
- ๋ชฝ๊ณ ๋๋น
- ๋งฅ๋ถํ๋ก
- MongoDB
- ์ด๋ถํ์
- ์คํ
- dp
- ํ
- BFS
- ํด์๋งต
- ๋งฅ๋ถ ์ ๊ทธ๋ ์ด๋
- ํ๋ก์ด๋์์ฌ
- Macbook pro 2012 mid 13
- ๋ฐ๋
- Total
- Today
- Yesterday