[コートリン]ペクジュン15686号:チキン出前-三星ソフトウェア能力試験出題
15917 ワード
に答える
質問ではM社のフライドチキン店しか運営できないことを説明しましただからbacktrackingを利用してM個のフライドチキン店を繰り返し抽出しない場合、数量を求め、それぞれの状況に対してフライドチキンの距離を求めればよい.
M個のフライドチキン店のコードを重複なく抽出
繰り返さない場合、
start
変数を使用することが重要です.そうでないとタイムアウトになります.fun selectChickenStore(start: Int, countSelected: Int, M: Int) {
if (countSelected == M) {
answer = min(calcChickenDst(), answer)
return
}
for (i in start until chickenList.size) {
selectedChickenStoreList.push(chickenList[i])
selectChickenStore(start + 1, countSelected + 1, M)
selectedChickenStoreList.pop()
}
}
フライドチキン距離計算コード
fun calcChickenDst(): Int {
var sum = 0
houseList.forEach { house ->
var minDst = Int.MAX_VALUE
selectedChickenStoreList.forEach { chicken ->
val dst = abs(house.r - chicken.r) + abs(house.c - chicken.c)
minDst = min(dst, minDst)
}
sum += minDst
if (sum > answer) return Int.MAX_VALUE
}
return sum
}
Source Code
package 삼성SW역량테스트.`15686번_치킨배달`
import java.util.Stack
import kotlin.math.abs
import kotlin.math.min
val chickenList = ArrayList<Dot>()
val houseList = ArrayList<Dot>()
val selectedChickenStoreList = Stack<Dot>()
var answer = Int.MAX_VALUE
fun main() {
val (N, M) = readln().split(" ").map { it.toInt() }
for (i in 0 until N) {
val str = readln().split(" ").map { it.toInt() }
for (j in 0 until N) {
val obj = str[j]
if (obj == 2) {
chickenList.add(Dot(i, j))
} else if (obj == 1) {
houseList.add(Dot(i, j))
}
}
}
selectChickenStore(0, 0, M)
println(answer)
}
fun selectChickenStore(start: Int, countSelected: Int, M: Int) {
if (countSelected == M) {
answer = min(calcChickenDst(), answer)
return
}
for (i in start until chickenList.size) {
selectedChickenStoreList.push(chickenList[i])
selectChickenStore(start + 1, countSelected + 1, M)
selectedChickenStoreList.pop()
}
}
fun calcChickenDst(): Int {
var sum = 0
houseList.forEach { house ->
var minDst = Int.MAX_VALUE
selectedChickenStoreList.forEach { chicken ->
val dst = abs(house.r - chicken.r) + abs(house.c - chicken.c)
minDst = min(dst, minDst)
}
sum += minDst
if (sum > answer) return Int.MAX_VALUE
}
return sum
}
data class Dot(val r: Int, val c: Int)
Reference
この問題について([コートリン]ペクジュン15686号:チキン出前-三星ソフトウェア能力試験出題), 我々は、より多くの情報をここで見つけました https://velog.io/@blucky8649/코틀린-백준-15686번-치킨-배달-삼성-SW-역량-테스트-기출-문제-풀이テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol