[HackerRank] Making Anagrams

아르당·2024년 4월 15일

HackerRank

목록 보기
76/109
post-thumbnail

문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음

Problem

우리는 첫 번째 문자열의 글자를 재배열하여 두 번째 문자열을 형성할 수 있다면 두 문자열은 서로 애너그램으로 간주한다. 다시 말해, 두 문자열이 모두 정확히 동일한 문자를 동일한 빈도로 포함해야 한다. 예를 들머, bacdcdcbac는 애너그램이지만, bacdcdcbad는 애너그램이 아니다.

앨리스는 암호학 수업을 듣고 애너그램이 매우 유용하다고 생각하고 있다. 앨리스는 두 개의 큰 문자열을 사용하는 암호화 체계를 결정했다. 여기서 암호화는 두 문자열을 애너그램으로 만드는 데 필요한 최소 문자 삭제 수에 의존한다. 너는 그녀에게 이 숫자를 찾도록 도와줄 수 있나?

두 개의 문자열 s1과 s2가 주어지고, 문자열의 길이는 같이 않을 수도 있다. 문자열 s1과 s2를 애너그램으로 만들기 위해 필요한 최소 문자 삭제 수를 구해라. 두 문자열 중 하나에서 문자를 삭제할 수 있다.

Example

s1 = "abc"
s2 = "amnop"

일치하는 유이란 문자는 'a'이고, s1에서 'bc'와 s2에서 'mnop'를 제거해야한다. 총 6개의 문자를 삭제해야 한다.

Function Description

makingAnagrams 함수를 완성해라.
makingAnagrams 함수는 아래와 같은 매개변수를 가지고 있다.

  • String s1: 문자열
  • String s2: 문자열

Returns

  • int: 삭제에 필요한 최소 수

Constraints

  • 1 <= |s1|, |s2| <= 10^4
  • s1과 s2는 영어 소문자 ascii[a-z]로 되어 있는 것을 보장한다.

Solved

이전 문제에서 사용했던 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;

All Code

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;
}
profile
내 마음대로 코드 작성하는 세상

0개의 댓글