ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [백준][Kotlin]1976번 여행 가자
    백준 2023. 4. 12. 15:01
    728x90

    해당 문제는 유니온 파인드을 이용하여 작성 할 수 있는 문제 였습니다.

    저의 경우 헷갈리지 않으려고 도시정보를 저장 하는 배열은 N+1의 size를 가진 IntArray를 생성하여 저장 하였습니다.

    여기서 제가 실수를 한번 했었는데 N의 값을 +1을 해서 받은 다음 배열 생성 후 N을 -1 을 한 뒤에 코드가 실행 되도록 작성해야 됬었는데 -1을 안해서 문제의 예제는 잘 돌아갔는데 제출을 하면 NullPointer 에러가 발생하였었습니다.

    -1을 코드 작성 시 바로 했어야 됬는데 하지 않아 해당 문제를 찾는데 있어 조금 당혹 스러웠던 경험을 하였습니다.

     

    하기는 제가 작성한 코드와 제출 결과 입니다.

     

    import java.io.BufferedReader
    import java.io.BufferedWriter
    import java.io.InputStreamReader
    import java.io.OutputStreamWriter
    import java.util.*
    
    lateinit var city: IntArray
    //val bw = BufferedWriter(OutputStreamWriter(System.out))
    fun main() {
        val br = BufferedReader(InputStreamReader(System.`in`))
        //val bw = BufferedWriter(OutputStreamWriter(System.out))
        var st = StringTokenizer(br.readLine())
        var n = st.nextToken().toInt()+1 // 도시 개수 
        st = StringTokenizer(br.readLine())
        var m = st.nextToken().toInt() // 여행 경로 데이터
        city = IntArray(n){i: Int ->  i} // 도시 정보
    
        n-- //이거 안해서 에러ㅠㅜ
        for(i in 1 ..n){
            st = StringTokenizer(br.readLine())
            for(j in 1 .. n){
                if(st.nextToken().toInt() == 1){
                    union(i,j)
                }
            }
        }
        st = StringTokenizer(br.readLine())
        var start = IntArray(m){i: Int -> st.nextToken().toInt()}
    
        var check = true
        for(i in 0 .. start.size-2){
            if(city[start[i]] != city[start[i+1]]){
                check = false
                break
            }
        }
    
        if(check){
            println("YES")
        } else {
            println("NO")
        }
    
        //bw.flush()
        //bw.close()
    }
    
    fun union(a:Int,b:Int){
        val A = find(a)
        val B = find(b)
    
        if(A != B){
            if(A < B){
                city[B] = A
            } else {
                city[A] = B
            }
        }
    }
    
    fun find(a:Int):Int{
        if(city[a] == a) return a
        else {
            city[a] = find(city[a])
        }
        return city[a]
    }

Designed by Tistory.