백준3107 - IPv6 JS 본문
반응형
https://www.acmicpc.net/problem/3107
해당 문제는 문제에서 주어진 규칙대로 구현하는 문제다.
1번 규칙을 해결하기 위해서 생략된 0을 채워줄 함수를 하나 만들었고
2번 규칙은 쌍 클론(::)이 사용되어 생략된 내용이 있는 경우와 그렇지 않은 경우에 따로 접근해 해결했다.
소스 코드는 다음과 같다.
const fs = require('fs')
const input = fs.readFileSync(process.platform === "linux" ? "/dev/stdin":"입력.txt")
.toString().trim()
// 0이 생략된 문자열에 0을 채워주는 함수
const padStartAct = (arr) => {
return arr.map((el)=> {
return el.length < 4 ? el.padStart(4,"0") : el
})
}
// '::'이 존재하는 경우
const includesDubbleSemi = (data) => {
const arr = data.split('::')
// 이 경우에는 ::으로 문자열을 쪼갠 뒤 각각 0이 생략된 부분을 채워준다
const [unit1, unit2] = arr.map(el => padStartAct(el.split(':')))
// 문자열의 총 길이는 정해져 있으므로, 규칙2로 생략된 문자열의 길이를 구할 수 있다
const zeroUnit = Array.from({
length : 8 - (unit1.length + unit2.length
)}, ()=> "0000")
// 생략된 부분을 채워 반환
const result = [...unit1, ...zeroUnit, ...unit2].join(':')
return result
}
// '::'이 존재하지 않는 경우
const notIncludesDubbleSemi = (data) => {
const arr = data.split(':')
// 이 경우에는 0이 생략된 부분만 채워준 뒤 반환
return padStartAct(arr).join(':')
}
function solution(data) {
console.log(
data.includes('::') ?
includesDubbleSemi(data) :
notIncludesDubbleSemi(data)
)
}
solution(input)
반응형
'개발 > algorithm' 카테고리의 다른 글
백준9324 - 진짜메시지 JS (0) | 2023.09.22 |
---|---|
백준1063 - 킹 JS (1) | 2023.09.21 |
백준3036 - 링 (유클리드 호제법) JS (0) | 2023.09.19 |
백준5567 - 결혼식 (그래프) JS (0) | 2023.09.18 |
백준15988 - 1,2,3 더하기 3 (다이나믹 프로그래밍) JS (0) | 2023.09.17 |
Comments