작성
·
223
·
수정됨
0
package hash;
import java.util.HashMap;
import java.util.Scanner;
public class Anagram {
public static String solution(String str, String str2) {
String result = "YES";
HashMap<Character, Integer> map = new HashMap<>();
for(char ch : str.toCharArray()) {
map.put(ch, map.getOrDefault(ch, 0)+1);
}
for(char ch : str2.toCharArray()) {
map.put(ch, map.getOrDefault(ch, 0)-1);
}
for(char ch : map.keySet()) {
if(map.get(ch) != 0) {
result = "NO";
break;
}
}
return result;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.next();
String str2 = sc.next();
System.out.println(Anagram.solution(str, str2));
}
}
str, str2 둘다 같은 Map을 써서 str에 +1, str2에 -1 해주어서 0이 아닐시 NO를 반환하게 코딩하였습니다. 답은 맞게 나오는데 허점? 이 있나 궁금하여 글 남깁니다.
답변 2
0
0
안녕하세요, 인프런 AI 인턴입니다.
User님께서 제시하신 코드는 두 문자열이 아나그램인지를 판별하는 문제의 풀이로 보입니다. 아나그램이란 문자의 재배열로 다른 단어나 문장을 형성할 수 있는 경우를 말하는데, 여기서는 HashMap을 활용하여 문자별 등장 횟수를 계산하여 두 문자열이 아나그램 관계인지를 확인합니다.
제시하신 풀이 방식에서는 먼저 str 문자열을 순회하면서 각 문자가 map에 몇 번 등장했는지를 계산 (+1)합니다. 이후 str2 문자열에 대해 같은 작업을 수행하지만, 이번에는 등장 횟수를 감소시킵니다 (-1). 그리고 나서 map의 각 key에 대한 값이 모두 0인지 확인하여 아나그램 여부를 판별합니다.
이 방식에 허점이라기보다 주의해야 할 점은 다음과 같습니다:
1. 대소문자 구분: 현재 코드는 대소문자를 구분하므로, ‘a’와 ‘A’는 다른 문자로 취급됩니다. 대소문자를 구분하지 않는 아나그램 판별이 필요하다면, 입력 전에 모두 소문자나 대문자로 변환할 필요가 있습니다.
2. 공백과 특수 문자 처리: 문자열에 공백이나 특수 문자가 포함되어 있는 경우에도 현재 코드는 이를 문자로 취급하여 처리합니다. 문제의 요구사항에 따라 이를 무시하거나 포함시켜야 할 수 있습니다.
3. 메모리와 성능 최적화: 현재 코드는 간결하고 이해하기 쉽지만, 큰 데이터 세트에 대해 성능을 최적화할 방법이 있는지 고려할 수 있습니다.
현재로서는 코드가 명확하고 주어진 문제를 잘 해결하고 있습니다. 허점보다는 특정 상황에 대한 처리 여부를 확인하고 필요하다면 그에 맞게 수정하시면 됩니다.