Cos Pro Python 1급 1차 02번 문제풀이

Contents of table:


Topic:
해밍거리 구하기

Review:
주어진 두 개의 문자열 리스트의 길이를 활용하고 인덱스값을 이용해서 두 리스트의 요소
들을 비교할 수 있는가?라는 것을 묻는 문제이다.

문제내용

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

  • 1001 0
  • 0011 0

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

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

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


매개변수 설명

두 2진수 문자열 binaryA와 binaryB가 solution 함수의 매개변수로 주어집니다.

  • binaryA의 길이는 1 이상 10 이하입니다.
  • binaryA는 0 또는 1로만 이루어진 문자열이며, 0으로 시작하지 않습니다.
  • binaryB의 길이는 1 이상 10 이하입니다.
  • binaryB는 0 또는 1로만 이루어진 문자열이며, 0으로 시작하지 않습니다.

return 값 설명

두 2진수 문자열의 해밍 거리를 return 해주세요.


예시

binaryA binaryB return
“10010” “110” 2

예시 설명

두 2진수의 자릿수는 각각 5와 3입니다. 자릿수를 맞추기 위해 “110” 앞에 0 두 개를 채워주면 “00110”이 됩니다. 이제 두 2진수 문자열의 해밍 거리를 구하면 다음과 같습니다.

  • 1001 0
  • 0011 0

위와 같이 첫 번째와 세 번째 문자가 서로 다르므로, 해밍 거리는 2가 됩니다.

정답코드

1
2
3
4
5
6
def func_a(bstr, bstr_len): # 문자열의 부족한 길이만큼의 0문자열을 추가하다
padZero = "" #빈 문자열
padSize = bstr_len - len(bstr) #매개변수로 주어진 문자열과, 주어진 문자열 만큼의 차이
for i in range(padSize): #위의 차이 만큼의 문자열 "0"을 빈 문자열 안에 넣어준다.
padZero += "0"
return padZero + bstr # 변수로 주어진 문자열에, "0"으로 채워진 문자열을 추가한다.
1
2
3
4
5
6
7
8
9
10
11
12
def solution(binaryA, binaryB):
max_length = max(len(binaryA), len(binaryB)) #두 문자열의 길이 중 더 큰 것을 고른다.
if max_length > len(binaryA): #binaryA가 더 작을 경우에, func_a를 이용해서 "0" 문자열을 추가해서 반환해준다.
binaryA = func_a(binaryA, max_length)
if max_length > len(binaryB): #binaryB가 더 작을 경우. 위와동일.
binaryB = fucn_a(binaryB, max_length)

hamming_distance = 0
for i in range(max_length): #두 매개변수의 요소들을 훑기 위한 for문.
if binaryA[i] != binaryB[i]:
hamming_distance += 1 #해밍거리 count
return hamming_distance
Author

Eric Park

Posted on

2020-09-19

Updated on

2020-09-21

Licensed under