티스토리 뷰

💻JAVA 코드 바로보기

 

 

 

 

문제 설명

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

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

  • 1001 0
  • 0011 0

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

 

 

 

 

 

 

 

 

주어진 코드

class Solution {
    public String func_a(String str, int len){
        String padZero = "";
        int padSize = @@@;
        for(int i = 0; i < padSize; i++)
            padZero += "0";
        return padZero + str;
    }

    public int solution(String binaryA, String binaryB) {
        int maxLength = Math.max(binaryA.length(), binaryB.length());
        binaryA = func_a(binaryA, maxLength);
        binaryB = func_a(binaryB, maxLength);

        int hammingDistance = 0;
        for(int i = 0; i < maxLength; i++)
            if(@@@)
        hammingDistance += 1;
        return hammingDistance;
    }

    // The following is main method to output testcase.
    public static void main(String[] args) {
        Solution sol = new Solution();
        String binaryA = "10010";
        String binaryB = "110";
        int ret = sol.solution(binaryA, binaryB);

        // Press Run button to receive output.
        System.out.println("Solution: return value of the method is " + ret + " .");
    }
}

 

 

 

 

1. 첫번째 빈칸

 

func_a의 매개변수 str은 binaryA 또는 binaryB를, len은 A와 B중 더 긴 문자열의 길이를 나타낸다.

이때 padSize의 값은 모르지만 return값이 str앞에 0을 붙인 값인것을 보아 문제조건 2,3번인

2단계. 첫 번째 2진수 문자열의 길이가 더 짧다면 문자열의 앞에 0을 채워넣어 길이를 맞춰줍니다.
3단계. 두 번째 2진수 문자열의 길이가 더 짧다면 문자열의 앞에 0을 채워넣어 길이를 맞춰줍니다.

항목을 해결하는 메소드임을 알 수있다.

 

0과 기존 문자열을 합쳐 긴 문자열의 길이와 같도록 만들어야 하기 때문에,

긴 문자열의 길이 - 기존 문자열(str)의 길이 만큼 0을 str 앞에 붙여주면 된다.

따라서 padSize = len-str.length();

public String func_a(String str, int len){
    String padZero = "";
    int padSize = @@@;
    for(int i = 0; i < padSize; i++)
        padZero += "0";
    return padZero + str;
}
public String func_a(String str, int len){
    String padZero = "";
    int padSize = len-str.length();
    for(int i = 0; i < padSize; i++)
        padZero += "0";
    return padZero + str;
}

 

 

 

 

 

2. 두번째 빈칸

 

func_a를 호출하였으므로 binaryA와 B는 길이가 같은 상태이다.

그렇다면 해밍 거리, 즉 같은 위치에 있지만 서로 다른 문자의 개수를 구하는 단계만 남아있다. 

binaryA의 i번째 값과 binaryB의 i번째 값이 다를때, hammingDistance의 값을 ++하면 해결된다.

따라서 if문 속 괄호에는

binaryA.charAt(i) != binaryB.charAt(i)

이 들어간다.

public int solution(String binaryA, String binaryB) {
    int maxLength = Math.max(binaryA.length(), binaryB.length());
    binaryA = func_a(binaryA, maxLength);
    binaryB = func_a(binaryB, maxLength);

    int hammingDistance = 0;
    for(int i = 0; i < maxLength; i++)
        if(@@@)
    hammingDistance += 1;
    return hammingDistance;
}
public int solution(String binaryA, String binaryB) {
    int maxLength = Math.max(binaryA.length(), binaryB.length());
    binaryA = func_a(binaryA, maxLength);
    binaryB = func_a(binaryB, maxLength);

    int hammingDistance = 0;
    for(int i = 0; i < maxLength; i++)
        if(binaryA.charAt(i)!=binaryB.charAt(i))
            hammingDistance += 1;
    return hammingDistance;
}

 

 

 

 

 

 

 

 

정답 코드(YBM과 동일)

package solution;

import java.util.ArrayList;
import java.util.Iterator;

class Solution {
    public String func_a(String str, int len){
        String padZero = "";
        int padSize = len-str.length();
        for(int i = 0; i < padSize; i++)
            padZero += "0";
        return padZero + str;
    }

    public int solution(String binaryA, String binaryB) {
        int maxLength = Math.max(binaryA.length(), binaryB.length());
        binaryA = func_a(binaryA, maxLength);
        binaryB = func_a(binaryB, maxLength);

        int hammingDistance = 0;
        for(int i = 0; i < maxLength; i++)
            if(binaryA.charAt(i)!=binaryB.charAt(i))
                hammingDistance += 1;
        return hammingDistance;
    }

    // The following is main method to output testcase.
    public static void main(String[] args) {
        Solution sol = new Solution();
        String binaryA = "10010";
        String binaryB = "110";
        int ret = sol.solution(binaryA, binaryB);

        // Press Run button to receive output.
        System.out.println("Solution: return value of the method is " + ret + " .");
    }
}

 

 

 

 

실행 결과

 

 

 


 

 

 

KimSky904 - Overview

Department of New Media Software. KimSky904 has 28 repositories available. Follow their code on GitHub.

github.com

 

댓글