fun main() {
var input = readLine()!!
if (input.startsWith(":")) {
input = "0$input"
}
input = input.replace("::", ":check:")
val group = input.split(":").count() - 1
input = input.replace(":check", ":0".repeat(8 - group))
val finalParts = input.split(":")
.map { str ->
"0".repeat(4 - str.length) + str
}
.joinToString(":")
println(finalParts)
}
골드치고는 쉬운 문제였습니다.
::1
과 같이::
으로 시작하는 경우 후에replace,split
을 더욱 용이하게 하기 위해서::
앞에 0을 붙여주었습니다.
input.replace("::", ":check:")
를 통해 ::을 변경해주었습니다. 후에 check라는 단어를 이용하여 0이 생략된 부분을 계산하여 치환해줄겁니다.
input.split(":").count() - 1
0이 얼마나 생략이 되었는지 계산해줍니다.input.replace(":check", ":0".repeat(8 - group))
여기서 계산한 값을 넣어주면서 0으로 모두 변경해줍니다. 이 작업이 끝나면 생략된 부분의 경우:0:
으로 변경 되게 됩니다.
input.split(":") .map { str -> "0".repeat(4 - str.length) + str }
를 통해 앞 쪽의 0이 생략 된 경우 0을 붙여줍니다. 이때 0은 최대 4개 까지만 붙여줍니다.
출처 : 백준 - IPv6 3107번