
문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음
우리는 첫 번째 문자열의 글자를 재배열하여 두 번째 문자열을 형성할 수 있다면 두 문자열은 서로 애너그램으로 간주한다. 다시 말해, 두 문자열이 모두 정확히 동일한 문자를 동일한 빈도로 포함해야 한다. 예를 들머, bacdc와 dcbac는 애너그램이지만, bacdc와 dcbad는 애너그램이 아니다.
앨리스는 암호학 수업을 듣고 애너그램이 매우 유용하다고 생각하고 있다. 앨리스는 두 개의 큰 문자열을 사용하는 암호화 체계를 결정했다. 여기서 암호화는 두 문자열을 애너그램으로 만드는 데 필요한 최소 문자 삭제 수에 의존한다. 너는 그녀에게 이 숫자를 찾도록 도와줄 수 있나?
두 개의 문자열 s1과 s2가 주어지고, 문자열의 길이는 같이 않을 수도 있다. 문자열 s1과 s2를 애너그램으로 만들기 위해 필요한 최소 문자 삭제 수를 구해라. 두 문자열 중 하나에서 문자를 삭제할 수 있다.
s1 = "abc"
s2 = "amnop"
일치하는 유이란 문자는 'a'이고, s1에서 'bc'와 s2에서 'mnop'를 제거해야한다. 총 6개의 문자를 삭제해야 한다.
makingAnagrams 함수를 완성해라.
makingAnagrams 함수는 아래와 같은 매개변수를 가지고 있다.
이전 문제에서 사용했던 Anagram의 getInputCount 메소드를 그대로 사용했다.
public static int[] getInputCount(String input){
int[] inputCount = new int[26];
for(int i = 0; i < input.length(); i++){
inputCount[input.charAt(i) - 'a']++;
}
return inputCount;
}
위 getInputCount 메소드를 사용해서 s1과 s2의 해당 문자의 개수를 구한다. 그리고 삭제할 문자의 수를 담을 count를 선언하고 0을 할당한다.
int[] s1Count = getInputCount(s1);
int[] s2Count = getInputCount(s2);
int count = 0;
그리고 반복문을 통해 각 문자의 차를 구해서 그 결과의 절대값을 count에 더해준다.
for(int i = 0; i < 26; i++){
count += Math.abs(s1Count[i] - s2Count[i]);
}
마지막으로 count를 반환한다.
return count;
public static int makingAnagrams(String s1, String s2) {
int[] s1Count = getInputCount(s1);
int[] s2Count = getInputCount(s2);
int count = 0;
for(int i = 0; i < 26; i++){
count += Math.abs(s1Count[i] - s2Count[i]);
}
return count;
}