package main
import "fmt"
func main() {
edges := [][]int{{2, 1}, {2, 5}, {3, 4}, {4, 5}, {5, 6}, {6, 7}, {7, 3}, {3, 8}, {8, 9}, {9, 10}, {10, 11}, {11, 3}}
fmt.Println(solution(edges))
}
func solution(edges [][]int) []int {
result := make([]int, 4)
edgesMap := make(map[int][]int)
for _, edge := range edges {
start := edge[0]
end := edge[1]
edgesMap[start] = append(edgesMap[start], end)
}
fmt.Println(edgesMap)
mapPointNum := make(map[int]int, 0)
for _, edge := range edges {
if value, ok := mapPointNum[edge[0]]; !ok {
mapPointNum[edge[0]] = 1
} else {
mapPointNum[edge[0]] = value + 1
}
}
var newNum, biggestValue int
for _, value := range mapPointNum {
if biggestValue < value {
biggestValue = value
}
}
calMap := make(map[int]int, 0)
for key, value := range mapPointNum {
if value == biggestValue {
calMap[key] = 0
}
}
for key, _ := range calMap {
for _, edge := range edges {
if edge[0] == key {
calMap[key] = calMap[key] + 1
}
if edge[1] == key {
calMap[key] = calMap[key] - 1
}
}
}
biggestValue = 0
for key, value := range calMap {
if biggestValue < value {
biggestValue = value
newNum = key
}
}
fmt.Println(calMap)
fmt.Println("------------")
fmt.Println("새로생긴 임의의 정점 :", newNum)
result[0] = newNum
fmt.Println("임의의 정점에서 나온 방향 맵 : ", edgesMap[newNum])
for _, start := range edgesMap[newNum] {
fmt.Println("그 방향의 도착지에 대한 기존 방향:", start)
if len(edgesMap[start]) == 2 {
result[3] = result[3] + 1
continue
}
if len(edgesMap[start]) == 0 {
result[2] = result[2] + 1
continue
}
if len(edgesMap[start]) == 1 {
if start == edgesMap[start][0] {
result[1] = result[1] + 1
continue
}
mapCount := make(map[int]bool)
shape := recursive(edgesMap, start, edgesMap[start][0], mapCount)
result[shape] = result[shape] + 1
}
}
return result
}
func recursive(edgesMap map[int][]int, current, next int, mapCount map[int]bool) int {
fmt.Println("현재지점:", current, "다음지점:", next)
mapCount[current] = true
if len(edgesMap[next]) == 2 {
return 3
}
if len(edgesMap[next]) == 0 {
return 2
}
if _, ok := mapCount[next]; ok {
return 1
}
return recursive(edgesMap, next, edgesMap[next][0], mapCount)
}