본문 바로가기

CodingTest Practice

[인프런] 아나그램

아나그램

Anagram이란 두 문자열이 알파벳의 나열 순서는 다르지만 그 구성이 일치하면 두 단어는 아나그램이라고 한다.즉, 어느 한 단어를 재배열하면 상대편 단어가 될 수 있는 것을 아나그램이라고 합니다.길이가 같은 두 개의 단어가 주어지면 두 단어가 아나그램인지 판별하는 프로그램을 작성하세요아나그램 판별 시 대소문자가 구분됩니다.

 

■ 문제 풀이

1) 입력 설명
- 첫 줄에 첫 번째 단어가 입력되고, 두 번째 줄에 두번째 단어가 입력된다.
- 단어의 길이는 100을 넘지 않는다.

2) 출력 설명
- 두 단어가 아나그램이면 "YES"를 출력하고, 아니면 "NO"를 출력합니다.

3) 테스트
- input : 
AbaAeCe
baeeACA
- output : YES

-input :

abaCC
Caaab
- output : NO

4) 문제풀이
- 이번 문제는 HashMap 자료구조를 이용하였다. 
- 첫 번째 입력된 문자열은 각 알파벳의 개수를 카운팅하여 map에 저장한다.
- 두 번째 입력된 문자열이 반복문을 돌면서, map에 key가 존재하지 않을 경우와 문자의 갯수가 0일때 NO를 출력하도록 한다. 

- 이전에 아나그램 문제를 풀때는 Arrarys 클래스의 sort 함수를 통해 입력 받은 두개의 문자들을 배열한 후(배열로 생성 후 정렬), equals 함수를 통해 두 배열이 동일한지를 비교하였다.
- 반복문이 여러번 사용되어 효율적이지 못한 해결 방법인거 같다.

[이전 문제 풀이]
https://ohsoyeon.tistory.com/entry/anagram

 

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

public class Main {

    public static String solution(String input1, String input2) {
        String answer = "YES";
        HashMap<Character, Integer> map = new HashMap<>();
        for (char c : input1.toCharArray()) {
            map.put(c, map.getOrDefault(c, 0) + 1);
        }

        for (char c : input2.toCharArray()) {
            if (!map.containsKey(c) || map.get(c) == 0) {
                return "NO";
            } else {
                map.put(c, map.get(c) - 1);
            }
        }

        return answer;
    }

    public static void main(String[] args) {
        final Scanner scanner = new Scanner(System.in);

        String input1 = scanner.next().trim();
        String input2 = scanner.next().trim();
        System.out.println(solution(input1, input2));
    }
}

 

 

 

 

'CodingTest Practice' 카테고리의 다른 글

[Stack] 괄호문자 제거  (0) 2022.05.12
[인프런] 학급 회장  (0) 2022.04.26
[인프런] 이진수 출력  (0) 2022.04.22
[인프런] 재귀함수  (0) 2022.04.22
[인프런] 뒤집은 소수  (0) 2022.04.21