[์•Œ๊ณ ๋ฆฌ์ฆ˜] ๋ฌธ์ž์—ด ํƒ์ƒ‰์šฉ ์ž๋ฃŒ๊ตฌ์กฐ Trie

๊ธฐ๋ณธํ˜• class Trie { data class TrieNode(var isEndOfWord : Boolean, val children : MutableMap) val root = TrieNode(false, mutableMapOf()) fun insert(word : String) { var currentNode = root word.forEach{ char -> val child = currentNode.children[char] ?: TrieNode(false, mutableMapOf()) currentNode.children[char] = child currentNode = child } currentNode.isEndOfWord = true } fun search(word : String) :..

[์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ/2020 KAKAO BLIND RECRUITMENT] ๊ฐ€์‚ฌ ๊ฒ€์ƒ‰

ํ•ด๊ฒฐ ์ฝ”๋“œ insertํ•  ๋•Œ ์ž…๋ ฅ๋œ ํ˜„์žฌ ๋…ธ๋“œ์—์„œ ๋„์ฐฉํ•  ์ˆ˜ ์žˆ๋Š” ๋‹จ์–ด๋ฅผ ๋‚จ์€ ๊ธ€์ž์ˆ˜ ๋ณ„๋กœ ์ €์žฅ (countEndOfWordPerDepth) ์˜ˆ๋ฅผ ๋“ค๋ฉด, "frodo" ๋‹จ์–ด๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด root์— countEndOfWordPerDepth[5]++ root.children['f'].countEndOfWordPerDepth[4]++ root.children['f'].children['r'].countEndOfWordPerDepth[3]++ ๊ณผ ๊ฐ™์ด ์ €์žฅํ•ด์„œ '?'๊ฐ€ ๋‚˜์˜ค๊ธฐ ์ „๊นŒ์ง€์˜ ๋…ธ๋“œ๋ฅผ ์ฐพ๊ณ  ํ•ด๋‹น ๋…ธ๋“œ์—์„œ '?'์˜ ๊ฐฏ์ˆ˜ ์ฆ‰ depth์— ์ €์žฅ๋œ ๋‹จ์–ด ์ˆ˜๋ฅผ returnํ•˜๋ฉด ๋น ๋ฅด๊ฒŒ ์ •๋‹ต์„ ๋„์ถœํ•  ์ˆ˜ ์žˆ๋‹ค. 2์ฐจ ํ•ด๊ฒฐ์ฝ”๋“œ์—์„œ ํ•˜์œ„๋…ธ๋“œ๋ฅผ ๋Œ๋ฉฐ ์ •๋‹ต์„ ๊ณ„์‚ฐํ•˜๋Š” ๋‹จ๊ณ„๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ์Œ import kotlin.test.*..

[์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ/2020 KAKAO BLIND RECRUITMENT] ๊ด„ํ˜ธ ๋ณ€ํ™˜

import kotlin.test.* class Solution { fun solution(s : String) : String { return tailrecChangeBalancedBracketToRightBracket("", s, "") } private tailrec fun tailrecChangeBalancedBracketToRightBracket(prev : String, s : String, next : String) : String { return when { s == "" -> prev + "" + next s.length == 2 -> prev + "()" + next else -> { val u = getFirstBalancedMinimum(s) val v = s.replaceFirst..