utf-8 검증 알고리즘

Lee Hyun Joon ·2022년 8월 14일

알고리즘정리

목록 보기
14/17

leetcode 393 파이썬 풀이 방식

uft-8인지 검증하는 알고리즘은 문자열들이 uft-8 형태인지 체크하는 알고리즘입니다.

def validUtf8(self, data: List[int]) -> bool:
        def check(size):
            for i in range(start+1, start+size+1):
                if i>= len(data) or (data[i] >> 6) != 0b10:
                    return False
            return True 
        start = 0
        while start < len(data): # list iterate 
            first = data[start] 
            if (first >> 3) == 0b11110 and check(3):
                start +=4 
            elif (first >> 4) == 0b1110 and check(2):
                start +=3 
            elif (first >> 5) == 0b110 and check(1):
                start +=2 
            elif (first >> 7) == 0:
                start +=1 
            else:
                return False 
        return True 

while을 사용한 이유는 여러 문자열을 통해 4바이트의 경우 후, 3 바이트의 경우가 올 수 있기 때문에 while을 사용한것이라고 생각합니다.
if ,elif를 통해 4바이트인 경우부터 1바이트의 경우까지 first의 비트 shifting을 통해 체크해줍니다. 동시에 check(개수) 함수를 호출합니다.
check 함수는 이후 문자열들이 각각의 바이트에 맞는 (10 ~ 형태)를 유지하고 있는지 체크해주는 함수입니다. 여기서 false는 utf-8이 아니라는 뜻이 됩니다.
이렇게 start이 list를 넘지 않을 때까지 체크해주다가 전부 문제가 없다면 True로 반환해줍니다.

profile
우당탕탕 개발 지망생

0개의 댓글