본문 바로가기

알고리즘/인프런

섹션 4. HashMap, TreeSet (해쉬, 정렬지원 Set) 2. 아나그램

문제

  • Anagram이란 두 문자열이 알파벳의 나열 순서를 다르지만 그 구성이 일치하면 두 단어는 아나그램이라고 합니다.
  • 예를 들면 AbaAeCe 와 baeeACA 는 알파벳을 나열 순서는 다르지만 그 구성을 살펴보면 A(2), a(1), b(1), C(1), e(2)로
  • 알파벳과 그 개수가 모두 일치합니다. 즉 어느 한 단어를 재 배열하면 상대편 단어가 될 수 있는 것을 아나그램이라 합니다.
  • 길이가 같은 두 개의 단어가 주어지면 두 단어가 아나그램인지 판별하는 프로그램을 작성하세요. 아나그램 판별시 대소문자가 구분됩니다.

입력

  • 첫 줄에 첫 번째 단어가 입력되고, 두 번째 줄에 두 번째 단어가 입력됩니다.
  • 단어의 길이는 100을 넘지 않습니다.

출력

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

입출력 예제


풀이방식

이번 문제는 HashMap 을 사용하여 푸는 문제이다.


설계과정

1. HashMap을 통해 Key와 Value로 나누어 각 값들을 저장한다.

2. 먼저 입력된 문자열을 Map에 저장하고, 그 다음에 입력된 문자열과 비교한다.


풀이과정

1. 두 문자열을 입력받는다.

2. String 형으로 메소드를 작성한다.

3. 결과값을 출력할 변수 result를 선언하고 YES로 초기화한다.

4. 향상된 for문을 통해 Key와 Value 값을 HashMap에 넣는다.

  • toCharArray() : 입력된 문자열을 문자 하나씩 분리해서 문자 배열을 생성한다.
  • map.put() : Key와 Value 값을 HashMap에 넣는다. 만약 키 값이 없으면 생성한다.
  • map.getOrDefault(Key, value) : 찾는 키가 존재한다면 그 값을 반환하고 없다면 기본 값을 반환하는 메소드이다.

5. 또 다른 향상된 for문을 통해 문자열 A와 문자열 B를 비교한다.

  • map.containsKey() : Map에 파라미터로 입력받은 값과 같은 값이 있으면 true를 리턴하는 메소드이다.
  • Key 혹은 Value가 동일하지 않으면 NO 를 리턴한다.

6. 두번째 HashMap에서 동일한 문자가 있으면 value 값을 감소시킨다.

  • 이미 위에서 키 값을 가지고 있으므로 getOrDefault() 사용할 필요가 없다.

 


해당 글은 인프런 > 자바(Java) 알고리즘 문제풀이 : 코딩테스트 대비(김태원) 강의를 참고하여 작성하였습니다.