header-img
Info :

1. ๋ฐฐ์šด์ 

์ผ์ • ํ’€์ด ์ดํ›„๋ถ€ํ„ฐ๋Š” ํ’€์ด ๋ฐฉ์‹์ด ๋˜‘๊ฐ™์Œ. ๋ถ„๋ช…ํžˆ ๋งž๋Š” ๋ฐฉ์‹ ๊ฐ™์€๋ฐ ์ž๊พธ ์‹œ๊ฐ„ ์ดˆ๊ณผ๋‚˜์„œ ์™œ ์ด๋Ÿฐ๊ฐ€ ์‹ถ์–ด์„œ ๋‹ค๋ฅธ ๋ถ„ ๋ธ”๋กœ๊ทธ ๋ณด๊ณ  ๋‹ค๋ฅธ์ ๋งŒ ๊ณ ์ณค๋”๋‹ˆ ๋งž์Œ..

๋ช…ํ™•ํ•˜๊ฒŒ ๋ฌธ์ œ์˜€๋˜ ๋ถ€๋ถ„์€ visited๋ฅผ IntArray๊ฐ€ ์•„๋‹ˆ๋ผ BooleanArray๋กœ ์„ ์–ธํ•œ ์  ๊ฐ™์Œ.
์ง„์งœ ํ’€์ด๊ฐ€ ๋‹ค ๋˜‘๊ฐ™์€๋ฐ ๋ฐฉ๋ฌธํ–ˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ Boolean Array๋กœ ํ•˜๋‹ˆ๊นŒ ์‹œ๊ฐ„ ์†Œ๋ชจ๊ฐ€ ๋” ํฐ๊ฐ€๋ด„.. 

๊ทธ๋ฆฌ๊ณ  ์ด๊ฑด ๋ฌธ์ œ์ธ์ง€๋Š” ์ž˜ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ ์ฒ˜์Œ์—๋Š” ๋‹ต์ด ๋ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์„ answer๋ผ๋Š” mutableList์— ๋„ฃ์–ด์„œ ๊ทธ๊ฑธ ์ˆœํšŒํ•˜๋ฉด์„œ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ–ˆ์Œ. ๊ทผ๋ฐ ๊ทธ๋ƒฅ answer๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  bufferWriter๋ฅผ answer๋งˆ๋ƒฅ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋ฐ”๊ฟˆ. 

๋‚ด ์ œ์ถœ ํ˜„ํ™ฉ์ธ๋ฐ ์›ƒ๊ธฐ์ง€๋„ ์•Š๋‹ค..ใ…Ž ์‹œ๊ฐ„์ดˆ๊ณผ ์ค„์ด๋ ค๊ณ  ํ˜ผ์ž ์ œ์ถœ ์ชฝ ํ•œ ํŽ˜์ด์ง€ ๋‹ค ์”€ ใ…‹ใ…‹ใ…‹ ;; 

 

2. my code

package baekjoon

import java.io.BufferedReader
import java.io.BufferedWriter
import java.io.InputStreamReader
import java.io.OutputStreamWriter
import java.util.*
import kotlin.collections.ArrayList

fun main(args: Array<String>) {
    // input
    val br = BufferedReader(InputStreamReader(System.`in`))
    var st = StringTokenizer(br.readLine())
    val size = st.nextToken().toInt()
    val m = st.nextToken().toInt()
    val nodes = Array(size+1){ArrayList<Int>()}
    repeat(m) {
        st = StringTokenizer(br.readLine())
        val x = st.nextToken().toInt()
        val y = st.nextToken().toInt()
        nodes[y].add(x)
    }

    fun dfs(
        parent: Int,
        visited: IntArray,
    ) {
        visited[parent] = 1
        for (i in 0 until nodes[parent].size) {
            if (visited[nodes[parent][i]] == 0) {
                dfs(nodes[parent][i], visited)
            }
        }
    }

    var max = 0
    var bw = BufferedWriter(OutputStreamWriter(System.out))
    var visited: IntArray

    (1..size).forEach {
        visited = IntArray(size + 1){ _ -> 0 }
        dfs(it, visited)

        val sum = visited.sum()
        if (sum > max) {
            max = sum
            bw = BufferedWriter(OutputStreamWriter(System.out))
            bw.append("$it ")
        } else if (sum == max) { bw.append("$it ") }
    }

    bw.flush()
    bw.close()
}
Problem Solving/BOJ