ezhoon

[인프런] 04-02 아나그램(해쉬) 본문

[Java] 인프런 문제풀이/HaspMap, TresSet (해쉬, 정렬지원 Set)

[인프런] 04-02 아나그램(해쉬)

ezhoon 2022. 1. 23. 21:41

📖  문제


  • 첫 줄과 두 번째 줄에 단어 입력
    • Anagram 구분 (두 문자열의 나열 순서와 상관없이 구성이 일치하면 두 문자열은 아나그램이라고 한다.
    • 예를 들면 AbaAeCe 와 baeeACA 는 나열순서는 다르지만 구성을 살펴보면 똑같기 때문에 아나그램입니다.
  • 아나그램 일 경우 "YES" 아닐 경우 "NO" 출력

출력 예시

 

⚠️  주의사항


  • 문자열의 종류만 구분하는게 아닌 안의 알파벳과 개수가 모두 일치해야 한다.
  • 대소문자는 구분해야 한다.

 

✍️  이해


* 1. 첫 줄 단어(A) 둘째 줄 단어(B)
* 2. A를 Map 입력
*  2-1. B를 Map에 getOrDefault(x, 0) == 0 이용해서 true -> answer = NO, break;
*  2-2. false 경우 map에 현재 존재하는 것이므로 x값의 value를 -1 해줘야한다.
*  // 2-2의 이유는 AAABB, AABB비교 할 경우 A와 B의 value 값은 다르지만 존재한다는 이유로 if문을 ture로 빠져나가기 때문에 존재 할 경우 value 값을 -1 해줘야 한다.
* 3. return answer

 

✏️  풀이


public class Main {

    public String solution(String str1, String str2) {

        String answer = "YES";

        HashMap<Character, Integer> map = new HashMap<>();

        for (char x : str1.toCharArray()) {
            map.put(x, map.getOrDefault(x, 0) + 1);
        }

        for (char x : str2.toCharArray()) {
            if (map.getOrDefault(x, 0) == 0) {
                answer = "NO";
                break;
            }else map.put(x, map.get(x) - 1);
        }
        return answer;
    }

    public static void main(String[] args) throws IOException {

        Main T = new Main();

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        String str1 = br.readLine();
        String str2 = br.readLine();

        System.out.println(T.solution(str1, str2));

    }
}

 


 

Comments