class Solution:
def validUtf8(self, data: List[int]) -> bool:
def check(n):
if start + n >= len(data):
return False
for i in range(start + 1, start + n + 1):
k = bin(data[i])[2:].zfill(8)
if k[0:2] != '10':
return False
return True
start = 0
while start < len(data):
first = bin(data[start])[2:].zfill(8)
# 바이트 수 = 1
if first[0] == '0':
start += 1
# 2
elif (first[0:3] == '110') and check(1):
start += 2
# 3
elif (first[0:4] == '1110') and check(2):
start += 3
# 4
elif (first[0:5] == '11110') and check(3):
start += 4
else:
return False
return True
첫 번째 자리의 바이트가 되는 first
을 확인하고 first+k
을 건너 뛴 다음 first
를 찾는다. 위의 방식을 data
의 길이를 초과하지 않을 때까지 반복해야 한다.
while start < len(data)
와 start += 증가
로 위의 알고리즘을 구현했다.