나의 작은 valley

[cosPro 1급] 해밍거리 본문

Computer Science/[알고리즘]

[cosPro 1급] 해밍거리

붕옥 아이젠 2023. 8. 12. 16:27
728x90

해밍 거리(Hamming distance)란 같은 길이를 가진 두 개의 문자열에서 같은 위치에 있지만 서로 다른 문자의 개수를 뜻 합니다. 예를 들어 두 2진수 문자열이 "10010"과 "110"이라면, 먼저 두 문자열의 자릿수를 맞추기 위해 "110"의 앞에 0 두 개를 채워 "00110"으로 만들어 줍니다. 두 2진수 문자열은 첫 번째와 세 번째 문자가 서로 다르므로 해밍 거리는 2입니다.

두 2진수 문자열 binaryA, binaryB의 해밍 거리를 구하려 합니다. 이를 위해 다음과 같이 간단히 프로그램 구조를 작성했습니다

  • 1단계. 길이가 더 긴 2진수 문자열의 길이를 구합니다.
  • 2단계. 첫 번째 2진수 문자열의 길이가 더 짧다면 문자열의 앞에 0을 채워넣어 길이를 맞춰줍니다.
  • 3단계. 두 번째 2진수 문자열의 길이가 더 짧다면 문자열의 앞에 0을 채워넣어 길이를 맞춰줍니다.
  • 4단계. 길이가 같은 두 2진수 문자열의 해밍 거리를 구합니다.

두 2진수 문자열 binaryA와 binaryB가 매개변수로 주어질 때, 두 2진수의 해밍 거리를 return 하도록 solution 함수를 작 성했습니다. 이때, 위 구조를 참고하여 중복되는 부분은 func_a라는 함수로 작성했습니다. 코드가 올바르게 동작할 수 있도 록 빈칸을 알맞게 채워 전체 코드를 완성해주세요.

 

 

 

코드(정답)

#길이를 맞추는 작업 중
def func_a(string, length):
    padZero = ""
    #최대길이 - 더 작은 문자열의 길이 -> 문자열 길이 차이값 
    padSize = length - len(string)
    #부족한 사이즈만큼 for문을 돌면서 0을 추가함
    for i in range(padSize):
        padZero += "0"
    #사이즈가 같아진 문자열을 return
    return padZero + string

def solution(binaryA, binaryB):
    #더 긴 문자열의 길이를 측정하여 변수에 저장
    max_length = max(len(binaryA), len(binaryB))
    binaryA = func_a(binaryA, max_length)
    binaryB = func_a(binaryB, max_length)
    
    hamming_distance = 0
    #for문을 돌며 둘의 값이 같지 않게된 순간 1을 누적해서 더함
    for i in range(max_length):
        if binaryA[i] != binaryB[i]:
            hamming_distance += 1
    return hamming_distance

#test
binaryA = "10010"
binaryB = "110"
print(solution(binaryA, binaryB))
728x90

'Computer Science > [알고리즘]' 카테고리의 다른 글

[cosPro 1급] 구현  (0) 2023.08.12
[cosPro 1급] 빈칸 채우기  (0) 2023.08.12
[cosPro 1급] 피자 배달 클래스  (0) 2023.08.12
[알고리즘] 특정 거리의 도시 찾기  (0) 2023.07.29
[알고리즘] 미로 탈출  (0) 2023.07.29
Comments