개발자는 기록이 답이다

자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비(HashMap, TreeSet(해쉬, 정렬지원 Set)_아나그램_HashMap) 본문

알고리즘/인프런 - Java알고리즘 입문

자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비(HashMap, TreeSet(해쉬, 정렬지원 Set)_아나그램_HashMap)

slow-walker 2023. 9. 29. 17:30

 

 

2. 아나그램(해쉬)

 

예시 입력 1 

AbaAeCe
baeeACA

예시 출력 1

YES

예시 입력 2 

abaCC
Caaab

예시 출력 2

NO
 
 

내가 푼 풀이(Time: 157ms Memory: 27MB)

 
 
해쉬맵을 별로 안써봐서 출력해가면서 풀어야 했다.
강의를 다 듣고 나면 프로그래머스에서 해쉬맵 문제도 풀어봐야겠다.
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

public class Main {

    public String solution(String a, String b) {
        String answer = "YES";
        HashMap<Character, Integer> firstMap = new HashMap<>();
        HashMap<Character, Integer> secondMap = new HashMap<>();

        for (int i = 0; i < a.length(); i++) {
            char big = a.charAt(i);
            firstMap.put(big, firstMap.getOrDefault(big, 0) + 1);
        }

        for (int i = 0; i < b.length(); i++) {
            char small = b.charAt(i);
            secondMap.put(small, secondMap.getOrDefault(small, 0) + 1);
        }

//        // firstMap 출력
//        System.out.println("firstMap:");
//        for (Map.Entry<Character, Integer> entry : firstMap.entrySet()) {
//            System.out.println("Key: " + entry.getKey() + ", Value: " + entry.getValue());
//        }
//
//        // secondMap 출력
//        System.out.println("secondMap:");
//        for (Map.Entry<Character, Integer> entry : secondMap.entrySet()) {
//            System.out.println("Key: " + entry.getKey() + ", Value: " + entry.getValue());
//        }

        for (char firstKey : firstMap.keySet()) {
            if (firstMap.get(firstKey) != secondMap.get(firstKey)) {
                return "NO";
            }

        }
        return answer;
    }

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

 

 

강의 풀이(Time: 145ms Memory: 27MB) 

Map객체를 2번 만들어주지 않아도 1번만 만들어서 카운팅한걸 빼는 방법이다.

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

public class Answer {

    public String solution(String a, String b) {
        String answer = "YES";
        HashMap<Character, Integer> map = new HashMap<>();
        for (char x : a.toCharArray()) {
            map.put(x, map.getOrDefault(x, 0) + 1);
        }
        for (char x : b.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) {
        Answer T = new Answer();
        Scanner kb = new Scanner(System.in);
        String a = kb.next();
        String b = kb.next();
        System.out.println(T.solution(a, b));

    }
}