[Algostudy] 아나그램(해쉬)

Noah97·2022년 3월 28일
1

Algorithm

목록 보기
2/2
post-thumbnail

문제설명

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

예를 들면 AbaAeCe 와 baeeACA 는 알파벳을 나열 순서는 다르지만 그 구성을 살펴보면 A(2), a(1), b(1), C(1), e(2)로

알파벳과 그 개수가 모두 일치합니다. 즉 어느 한 단어를 재 배열하면 상대편 단어가 될 수 있는 것을 아나그램이라 합니다.

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

입력

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

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

출력

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

입력예제                                                    예시 출력
AbaAeCe
baeeACA                                            YES

작성한 코드

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

public class Main {

	public static void main(String[] args) {
		HashMap<Character, Integer> map1 = new HashMap<>();
		HashMap<Character, Integer> map2 = new HashMap<>();
		Scanner sc = new Scanner(System.in);
		String str1 = sc.next();
		String str2 = sc.next();
		String answer = " ";
		for(char x : str1.toCharArray()) {
			map1.put(x, map1.getOrDefault(x, 0)+1);
		}
		for(char x : str2.toCharArray()) {
			map2.put(x, map2.getOrDefault(x, 0)+1);
		}
		for(char x : map1.keySet()) {
			if(map1.get(x) == map2.get(x)) {
				answer = "YES";
			}
			else {
				answer = "NO"; break;
			}
			
		}
		System.out.print(answer);
		
	}

}

👀 여기서 중요했던 것

아나그램은 대소문자를 구분하여 문자열의 나열 순서는 다르지만 같은 문자인지 판단하는 것이다. 그래서 str1과 str2를 입력받아서 HashMap을 이용하여 문자열에서 각각의 키의 값이 몇개 나왔는지 확인해 주어 keySet()을 이용하여 탐색하였고 만약 키 값이 서로 같다면 답은 YES 틀리다면 NO를 출력한다.

HashMap을 사용하지 않은 방법

import java.util.Arrays;
import java.util.Scanner;

public class 아나그램withArraySort {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		String str1 = sc.next();
		String str2 = sc.next();
		str1.toUpperCase();
		str2.toUpperCase();
		char[] sortStr1 = str1.toCharArray();
		char[] sortStr2 = str2.toCharArray();
		Arrays.sort(sortStr1);
		Arrays.sort(sortStr2);
		
		if(Arrays.equals(sortStr1, sortStr2)) {
			System.out.print("YES");
		}
		else System.out.print("NO");
	}

}

  str1과 str2를 입력받아 대문자로 바꿔준 다음 char형으로 변환 후 정렬하여 Arrays.equals 메소드를 사용하여 두 배열이 같다면 YES를 출력하고 아니면 NO를 출력한다.

profile
안녕하세요 반갑습니다😊

0개의 댓글