문제 이해
순서 상관없이 들어있는 알파벳이 같으면 YES, 다르면 NO를 출력하는 문제이다.
문제 해결
알파벳의 나열들을 스캐너 객체를 사용해 각각 str1과 str2로 받아주었다.
Scanner in = new Scanner(System.in);
String str1 = in.nextLine();
String str2 = in.nextLine();
이전 문제와 마찬가지로 str1을 String 형태로 입력받았으므로 toCharArray() 과정이 필요하다. char 데이터 타입 key로 하나씩 받아 key가 존재하면 key의 값을, 없으면 0을 return 하고 그 값에서 1을 더해 map1에 넣어준다. 즉 해당 알파벳(key)이 들어올 때마다 그 개수(value)가 증가되는 코드이다
마찬가지로 str2도 똑같은 과정으로 map2에 넣어준다.
HashMap<Character, Integer> map1 = new HashMap<>();
for(char key : str1.toCharArray()) {
map1.put(key, map1.getOrDefault(key,0) + 1);
}
HashMap<Character, Integer> map2 = new HashMap<>();
for(char key : str2.toCharArray()) {
map2.put(key, map2.getOrDefault(key,0) + 1);
}
.
그런 후에 만약 map1이 map2와 동일하다면 "YES"를 출력해주고, 동일하지 않다면 "NO"를 출력하는 코드를 작성해주면 된다.
처음에는 아래와 같이 비교를 했는데, 다른 답이 나왔다. 이 메서드 호출은 map1이 map2라는 값 자체를 가지고 있는지를 검사하는 것으로, 두 HashMap의 내용을 비교하는 올바른 방법이 아니다.
if(map1.containsValue(map2))
System.out.println("Yes");
else
System.out.println("No");
아래와 같이 equals 를 사용해 비교해주어야 한다.
if(map1.equals(map2))
System.out.println("YES");
else
System.out.println("NO");
최종 코드
import java.util.HashMap;
import java.util.Scanner;
public class P02_아나그램_해쉬 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String str1 = in.nextLine();
String str2 = in.nextLine();
HashMap<Character, Integer> map1 = new HashMap<>();
for(char key : str1.toCharArray()) {
map1.put(key, map1.getOrDefault(key,0) + 1);
}
HashMap<Character, Integer> map2 = new HashMap<>();
for(char key : str2.toCharArray()) {
map2.put(key, map2.getOrDefault(key,0) + 1);
}
if(map1.equals(map2))
System.out.println("YES");
else
System.out.println("NO");
}
}
반응형
'알고리즘 문제풀이 입문: 코딩테스트 대비 > 섹션 4. HashMap, TreeSet (해쉬, 정렬지원 Set)' 카테고리의 다른 글
K번째 큰 수 (0) | 2024.04.05 |
---|---|
모든 아나그램 찾기 (0) | 2024.04.05 |
매출액의 종류 (0) | 2024.04.04 |
학급 회장 (해쉬) (0) | 2024.04.02 |
Hash 개념 (0) | 2024.04.02 |