fun solution(str1: String, str2: String) : Int {
val ALTHA = 65536
val regex = Regex("[a-zA-Z][a-zA-Z]")
var union = 0
var intersection = 0
val str1List = str1.toList().windowed(2).mapNotNull{ list ->
var newStr : String = String(list.toCharArray()).toLowerCase()
if(regex.matches(newStr)) newStr
else null
}
val str2List = str2.toList().windowed(2).mapNotNull{ list ->
var newStr : String = String(list.toCharArray()).toLowerCase()
if(regex.matches(newStr)) newStr
else null
}
var answer = mutableMapOf<String, Pair<Int, Int>>()
str1List.forEach{
if(answer.containsKey(it)) {
answer[it] = Pair(answer[it]!!.first + 1, answer[it]!!.second)
} else {
answer.put(it, Pair(1, 0))
}
}
str2List.forEach{
if(answer.containsKey(it)) {
answer[it] = Pair(answer[it]!!.first, answer[it]!!.second + 1)
} else {
answer.put(it, Pair(0, 1))
}
}
answer.forEach { key, value ->
intersection += minOf(value.first, value.second)
union += maxOf(value.first, value.second)
}
return if(str1List.size == 0 && str2List.size == 0) ALTHA
else ((intersection.toDouble() / union.toDouble()) * ALTHA).toInt()
}
fun main() {
var a = solution("FRANCE", "french")
println("$a / 16384")
a = solution("handshake", "shake hands")
println("$a / 65536")
a = solution("aa1+aa2", "AAAA12")
println("$a / 43690")
a = solution("E=M*C^2", "e=m*c^2")
println("$a / 65536")
}
๋ด์ค ํด๋ฌ์คํฐ๋ง ๋ฌธ์ ๋ฅผ kotlin์ผ๋ก ํ์๋ค.
ํด๋น ๋ฌธ์ ๋ ์ฝํ๋ฆฐ์ ์ง์ํ์ง ์์์ ๋ฌธ์ ์ ๋์จ ์ผ์ด์ค๋ค๋ง ๋ต์ด ์ผ์นํ๋ ์ง ํ์ธํ๋ค.
windowed์ ์ ๊ทํํ์ ์ฌ์ฉ์ด ์์ง ์ต์ํ์ง ์์ ์กฐ๊ธ ํท๊ฐ๋ ธ๋ค.