solved

[์•Œ๊ณ ๋ฆฌ์ฆ˜๋ฌธ์ œ/2018 KAKAO BLIND RECRUITMENT] ๋‰ด์Šค ํด๋Ÿฌ์Šคํ„ฐ๋ง

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์™€ ์ •๊ทœํ‘œํ˜„์‹ ์‚ฌ์šฉ์ด ์•„์ง ์ต์ˆ™ํ•˜์ง€ ์•Š์•„ ์กฐ๊ธˆ ํ—ท๊ฐˆ๋ ธ๋‹ค.