Code in

프로그래머스 깊이/너비 우선 탐색 여행경로 with Kotlin 본문

알고리즘 스터디_문제풀이

프로그래머스 깊이/너비 우선 탐색 여행경로 with Kotlin

heyhmin 2020. 8. 30. 18:20

프로그래머스 깊이/너비 우선 탐색 여행경로 문제입니다.

프로그래머스에서의 풀이입니다.

import java.util.Stack

class Solution {
    val path: MutableList<String> = mutableListOf()
	val stack: Stack<String> = Stack()
	fun solution(tickets: Array<Array<String>>): Array<String> {
    	tickets.sortWith(compareBy({ it[0] }, { it[1] }))
    	val usedTicket = BooleanArray(tickets.size) { false }
    	for (i in tickets.indices) {
        	if (tickets[i][0] == "ICN") {
            	usedTicket[i] = true
            	stack.push("ICN")
            	stack.push(tickets[i][1])
            	visit(tickets, 1, usedTicket)
            	//reset
            	while(!stack.isEmpty())
                	stack.pop()
            	for(k in usedTicket.indices)
                	usedTicket[k] = false
            	if(!path.isEmpty()) break
        	}
    	}
    	print(path.toTypedArray().contentToString())
    	return path.toTypedArray()
	}

    fun visit(tickets: Array<Array<String>>, cnt: Int, usedTicket: BooleanArray) {
        if (cnt >= tickets.size && tickets.size < stack.size) {
            val tmpstack = Stack<String>()
            while (!stack.isEmpty())
                tmpstack.push(stack.pop())
            var tmpCnt = cnt
            while (!tmpstack.isEmpty() && tmpCnt >= 0){
                print(tmpCnt)
                tmpCnt--
                path.add(tmpstack.pop())
            }
            return
        }else{
            val next = stack.peek()
            for (i in tickets.indices){
                if (usedTicket[i]) continue
                if (tickets[i][0] == next){
                    usedTicket[i] = true
                    stack.add(tickets[i][1])
                    visit(tickets, cnt+1, usedTicket)
                    if (!stack.isEmpty()) stack.pop()
                    usedTicket[i] = false
                }
            }
        }
    }
}

URL: https://programmers.co.kr/learn/courses/30/lessons/43164#

 

코딩테스트 연습 - 여행경로

[[ICN, SFO], [ICN, ATL], [SFO, ATL], [ATL, ICN], [ATL,SFO]] [ICN, ATL, ICN, SFO, ATL, SFO]

programmers.co.kr

 

Comments