오늘보다 더 나은 내일의 나에게_

자바 알고리즘 문제 풀이 HashMap_TreeSet Q02_ 아나그램(해쉬) 본문

ALGORITHM/inflearn_javaAlgorithm

자바 알고리즘 문제 풀이 HashMap_TreeSet Q02_ 아나그램(해쉬)

chan_96 2022. 4. 9. 13:25
728x90
설명

Anagram이란 두 문자열이 알파벳의 나열 순서를 다르지만 그 구성이 일치하면 두 단어는 아나그램이라고 합니다.

예를 들면 AbaAeCe 와 baeeACA 는 알파벳을 나열 순서는 다르지만 그 구성을 살펴보면 A(2), a(1), b(1), C(1), e(2)로 알파벳과 그 개수가 모두 일치합니다. 즉 어느 한 단어를 재 배열하면 상대편 단어가 될 수 있는 것을 아나그램이라 합니다.

길이가 같은 두 개의 단어가 주어지면 두 단어가 아나그램인지 판별하는 프로그램을 작성하세요. 아나그램 판별시 대소문자가 구분됩니다.


입력

첫 줄에 첫 번째 단어가 입력되고, 두 번째 줄에 두 번째 단어가 입력됩니다.

단어의 길이는 100을 넘지 않습니다.


출력

두 단어가 아나그램이면 “YES"를 출력하고, 아니면 ”NO"를 출력합니다.



예시 입력1


예시 출력1

AbaAeCe
baeeACA
YES

예시 입력2


예시 출력2

abaCC
Caaab
NO

 

코드

내가 입력한 코드

더보기
package HashMap_TreeSet;

import java.util.HashMap;
import java.util.Scanner;

public class Q02 {
    public String solution(String arr1, String arr2){
        String answer = "YES";
        String temp = arr1+arr2;
        HashMap<Character,Integer> map = new HashMap<>();
        
        for(char x :temp.toCharArray()){
            map.put(x,map.getOrDefault(x, 0)+1);
        }
        
        for(char x :temp.toCharArray()){
            if(map.get(x)%2!=0){
                answer="NO";
            }
        }

        return answer;
    }


    public static void main(String[] args) {
        Q02 T = new Q02();
        Scanner kb = new Scanner(System.in);
        String str1 = kb.next();
        String str2 = kb.next();
        System.out.print(T.solution(str1,str2));
        kb.close();
    }
}

해설 코드

더보기
import java.util.*;
class Main {	
	public String solution(String s1, String s2){
		String answer="YES";
		HashMap<Character, Integer> map=new HashMap<>();
		for(char x : s1.toCharArray()){
			map.put(x, map.getOrDefault(x, 0)+1);
		}
		for(char x : s2.toCharArray()){
			if(!map.containsKey(x) || map.get(x)==0) return "NO";
			map.put(x, map.get(x)-1); 
		}
		return answer;
	}

	public static void main(String[] args){
		Main T = new Main();
		Scanner kb = new Scanner(System.in);
		String a=kb.next();
		String b=kb.next();
		System.out.print(T.solution(a, b));
	}
}

 

 

풀이 및 정리 

먼저 Anagram이란?
: 두 문자열이 알파벳의 나열 순서를 다르지만 그 구성이 일치하면 두 단어

주의사항!
- 길이가 같은 두 문자열이 주어진다.
- 대소문자 구분!

내가 풀이한 방법은 입력받은 문자열 두 개를 합치고 먼저 map에 알파벳별로 넣는다.
그리고 난 후 각각의 key값인 알파벳의 value값을 2로 나눈 나머지가 0이 아니면 NO를 반환하고 나머지가 0이면 YES를 출력한다. 두 개의 문자열이 같다면 value값을 더하고 2로 나눈 나머지는 무조건 0이 나올 수밖에 없다.

해설코드를 정리해보면 먼저 문자열 한개를 map에 넣는다. 두번째 문자열을 map과 비교한다. 두번째 문자열의 각 인덱스 알파벳이 map에 key로 존재하지않거나 key값이 0이면 NO를 반환한다.
728x90
Comments