문제 설명
해밍 거리(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 해주세요.
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <string.h>
char* func_a(char* str, int len){
char* padZero = (char*)malloc(sizeof(char)*(len+1));
for(int i = 0; i < len+1; ++i)
padZero[i] = 0;
int padSize = len - strlen(str);
for(int i = 0; i < padSize; ++i)
padZero[i] = '0';
strcat(padZero, str);
return padZero;
}
int max(int a, int b){
return a > b ? a : b;
}
int solution(char* binaryA, char* binaryB) {
int max_length = max(strlen(binaryA), strlen(binaryB));
if(max_length > strlen(binaryA))
binaryA = func_a(binaryA, max_length);
if(max_length > strlen(binaryB))
binaryB = func_a(binaryB, max_length);
int hamming_distance = 0;
for(int i = 0; i < max_length; ++i)
if(binaryA[i] != binaryB[i])
hamming_distance += 1;
return hamming_distance;
}
'CODING' 카테고리의 다른 글
COS Pro 1급 C언어 모의고사 - 시험 점수 정렬 (0) | 2023.12.17 |
---|---|
[BAEKJOON] 어른 상어 (0) | 2023.12.08 |
COS Pro 1급 C언어 모의고사 - 피자 (0) | 2023.11.28 |
COS Pro 1급 C언어 모의고사 - Up and down (0) | 2023.11.19 |
COS Pro 1급 C언어 모의고사 - 주식으로 최대 수익을 내세요 (0) | 2023.11.08 |
댓글