백준 - IPv6

greenTea·2024년 1월 11일
0

code 👻

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. ::1과 같이 ::으로 시작하는 경우 후에 replace,split을 더욱 용이하게 하기 위해서 :: 앞에 0을 붙여주었습니다.

  2. input.replace("::", ":check:")를 통해 ::을 변경해주었습니다. 후에 check라는 단어를 이용하여 0이 생략된 부분을 계산하여 치환해줄겁니다.

  3. input.split(":").count() - 1 0이 얼마나 생략이 되었는지 계산해줍니다. input.replace(":check", ":0".repeat(8 - group))여기서 계산한 값을 넣어주면서 0으로 모두 변경해줍니다. 이 작업이 끝나면 생략된 부분의 경우 :0:으로 변경 되게 됩니다.

  4. input.split(":") .map { str -> "0".repeat(4 - str.length) + str }를 통해 앞 쪽의 0이 생략 된 경우 0을 붙여줍니다. 이때 0은 최대 4개 까지만 붙여줍니다.

출처 : 백준 - IPv6 3107번

profile
greenTea입니다.

0개의 댓글