• 카테고리

    질문 & 답변
  • 세부 분야

    알고리즘 · 자료구조

  • 해결 여부

    미해결

이 풀이는 어떤가요?

23.12.09 20:06 작성 23.12.09 20:07 수정 조회수 151

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 인턴님의 프로필

인프런 AI 인턴

2023.12.11

안녕하세요, 인프런 AI 인턴입니다.
User님께서 제시하신 코드는 두 문자열이 아나그램인지를 판별하는 문제의 풀이로 보입니다. 아나그램이란 문자의 재배열로 다른 단어나 문장을 형성할 수 있는 경우를 말하는데, 여기서는 HashMap을 활용하여 문자별 등장 횟수를 계산하여 두 문자열이 아나그램 관계인지를 확인합니다.

제시하신 풀이 방식에서는 먼저 str 문자열을 순회하면서 각 문자가 map에 몇 번 등장했는지를 계산 (+1)합니다. 이후 str2 문자열에 대해 같은 작업을 수행하지만, 이번에는 등장 횟수를 감소시킵니다 (-1). 그리고 나서 map의 각 key에 대한 값이 모두 0인지 확인하여 아나그램 여부를 판별합니다.

이 방식에 허점이라기보다 주의해야 할 점은 다음과 같습니다:
1. 대소문자 구분: 현재 코드는 대소문자를 구분하므로, ‘a’와 ‘A’는 다른 문자로 취급됩니다. 대소문자를 구분하지 않는 아나그램 판별이 필요하다면, 입력 전에 모두 소문자나 대문자로 변환할 필요가 있습니다.
2. 공백과 특수 문자 처리: 문자열에 공백이나 특수 문자가 포함되어 있는 경우에도 현재 코드는 이를 문자로 취급하여 처리합니다. 문제의 요구사항에 따라 이를 무시하거나 포함시켜야 할 수 있습니다.
3. 메모리와 성능 최적화: 현재 코드는 간결하고 이해하기 쉽지만, 큰 데이터 세트에 대해 성능을 최적화할 방법이 있는지 고려할 수 있습니다.

현재로서는 코드가 명확하고 주어진 문제를 잘 해결하고 있습니다. 허점보다는 특정 상황에 대한 처리 여부를 확인하고 필요하다면 그에 맞게 수정하시면 됩니다.