문제 링크
문제 해설
문자열 파싱 문제. 조건에 맞게 축약된 IPv6를 원래 IPv6로 복원해야 한다.
문제에서 주어진 두가지 조건을 역순으로 생각해보자.
- 0으로만 이루어져 있는 하나 이상의 연속된 그룹을 하나 골라서 콜론 2개(::)로 바꿀 수 있다.
IPv6는 8 그룹의 16진수로 구성되어 있다. 즉, 축약되지 않은 원래 형태는 7개의 콜론으로 16진수 그룹을 나누게 된다.
즉, 축약된 IP 주소에서 콜론의 개수가 7개가 되도록 보충을 해주면 된다.
split()
으로 문자열을 분리하면 빈 문자열이 포함된 문자열 리스트를 얻을 수 있다. 예제 2의 경우 ["", "", "1"]
와 같은 문자열 리스트가 되는 것이다. 이를 통해 보충해야 할 콜론의 개수를 구할 수 있다.
":".repeat(8 - split(':').size)
이제 replace()
를 사용해서 8 그룹으로 나눠질 수 있도록 축약되어 표시됐던 콜론 2개를 교체해주면 된다. 다만 원래 있던 콜론 2개가 소실되지 않도록 위에서 구한 보충해야 할 콜론의 개수에 2를 더해줘야 한다.
readLine().run { replace("::", ":".repeat(8 - split(':').size) + 2) }
- 각 그룹의 앞자리 0의 전체 또는 일부를 생략할 수 있다.
각 그룹은 4자리의 16진수로 구성되어 있는데 그룹의 앞자리 0만 생략할 수 있다고 한다. 즉, 모든 그룹이 4자리가 되도록 앞자리를 0으로 채워주고 콜론으로 연결하기만 하면 된다.
ipv6.split(':').joinToString(":") { it.padStart(4, '0') }
Code
fun main() = with(System.`in`.bufferedReader()) {
val ipv6 = readLine().run { replace("::", ":".repeat(10 - split(":").size)) }
println(ipv6.split(':').joinToString(":") { it.padStart(4, '0') })
}
'Algorithm > BOJ' 카테고리의 다른 글
[Kotlin] 백준 25418 : 정수 a를 k로 만들기 (0) | 2024.04.29 |
---|---|
[Kotlin] 백준 13199 : 치킨 먹고 싶다 (0) | 2024.03.25 |
[Kotlin] 백준 25240 : 가희와 파일 탐색기 2 (0) | 2023.12.30 |
[Kotlin] 백준 11082 : 소수를 분수로 (0) | 2023.12.11 |
[Kotlin] 백준 1850 : 최대공약수 (2) | 2023.11.11 |
댓글