
😎풀이
- 첫 문자를 통해
N바이트의 문자인지 판별
1-1. 이 때, UTF-8 특성상 1 ~ 4 바이트만 가능
1-2. 1 바이트는 00, 4바이트는 11110으로 시작하기 때문에, 1로 시작하는 비트가 1개이거나, 4개를 초과한다면 UTF-8형식 위반
- 후속 비트는
10으로 시작해야하며, 그러한 바이트가 N-1개 있어야 함
- 올바른
UTF-8 형식 여부를 판별하여 반환
function validUtf8(data: number[]): boolean {
let tailer = 0
for (const num of data) {
const binary = num.toString(2).padStart(8, '0')
if (tailer === 0) {
let startOne = 0
for (const bit of binary) {
if (bit === '1') startOne++
else break
}
if (startOne === 0) continue
if (startOne === 1 || startOne > 4) return false
tailer = startOne - 1
} else {
if (binary.startsWith('10')) {
tailer--
} else {
return false
}
}
}
return tailer === 0
}