본문 바로가기

COS pro 강의자료

COS pro python 1차 2번문제

'''
구성은

1. 문제 설명
2. 원본 문제(코드)
3. 강사 답안
4. 주최측 답안

순으로 되어있습니다.

빈칸채우기와 한 줄 수정의 경우 
강사 답안과 주최 답안이 유사 / 동일할 수 있습니다.



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

* `1`0`0`1 0
* `0`0`1`1 0

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

~~~
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진수 문자열의 해밍 거리를 구하면 다음과 같습니다.

* `1`0`0`1 0
* `0`0`1`1 0

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



def func_a(string, length):
    padZero = ""
    padSize = @@@
    for i in range(padSize):
        padZero += "0"
    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 i in range(max_length):
        if @@@:
            hamming_distance += 1
    return hamming_distance

#The following is code to output testcase.
binaryA = "10010"
binaryB = "110"
ret = solution(binaryA, binaryB)

#Press Run button to receive output. 
print("Solution: return value of the function is", ret, ".")

'''

def func_a(string, length):
    padZero = ""
    padSize = length - len(string)
    '''
    자릿수가 차이나는 만큼 0을 앞에 붙일 것이기 때문에 
    자릿수 차이를 위해 최대길이에서 문자열 길이를 뺌
    '''
    for i in range(padSize):
        padZero += "0"
    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 i in range(max_length):
        '''
        같은 자릿수일 때 서로 다른 값이라면 1씩 증가하는 조건이므로
        같은 자릿수를 뽑기 위해 같은 인덱스를 이용
        서로 다른 값 판별을 위해 != 이용
        '''
        if binaryA[i] != binaryB[i]:
            hamming_distance += 1
    return hamming_distance

#The following is code to output testcase.
binaryA = "10010"
binaryB = "110"
ret = solution(binaryA, binaryB)

#Press Run button to receive output. 
print("Solution: return value of the function is", ret, ".")

'''
주최 제공답안
def func_a(bstr, bstr_len):
    padZero = ""
    padSize = bstr_len - len(bstr)
    for i in range(padSize):
        padZero += "0"
    return padZero + bstr

def solution(binaryA, binaryB):
    max_length = max(len(binaryA), len(binaryB))
    if max_length > len(binaryA):
        binaryA = func_a(binaryA, max_length)
    if max_length > len(binaryB):
        binaryB = fucn_a(binaryB, max_length)
    
    hamming_distance = 0
    for i in range(max_length):
        if binaryA[i] != binaryB[i]:
            hamming_distance += 1
    return hamming_distance
'''

'COS pro 강의자료' 카테고리의 다른 글

COS pro python 1차 6번문제  (0) 2020.03.20
COS pro python 1차 5번문제  (0) 2020.03.20
COS pro python 1차 4번문제  (0) 2020.03.20
COS pro python 1차 3번문제  (0) 2020.03.20
COS pro python 1차 1번문제  (0) 2020.03.20