이 알고리즘 문제는 인프런의 자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비 (김태원)의 문제입니다.
문제 설명
코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
public class sec04_02 {
public static String solution(String str1, String str2)
{
if(str1.length() != str2.length()) return "NO";
HashMap<Character, Integer> map1 = new HashMap();
HashMap<Character, Integer> map2 = new HashMap();
for(int i = 0; i < str1.length(); ++i)
{
map1.put(str1.charAt(i), map1.getOrDefault(str1.charAt(i), 0) + 1);
map2.put(str2.charAt(i), map2.getOrDefault(str2.charAt(i), 0) + 1);
}
for(char c : map1.keySet()) if(!(map2.containsKey(c) && (map2.get(c).equals(map1.get(c))))) return "NO";
return "YES";
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input1 = br.readLine();
String input2 = br.readLine();
System.out.println(solution(input1, input2));
}
}
설명
- str1과 str2의 길이가 다르면, “NO”를 반환하여 아나그램이 아님을 바로 확인할 수 있다.
- HashMap<Character, Integer> map1와 HashMap<Character, Integer> map2를 사용하여 각 문자열의 문자를 카운팅한다.
각 문자는 map1과 map2에 저장되며, 이미 존재하는 문자일 경우 값을 증가시킨다. - map1의 각 키(문자)를 순회하면서, map2에 해당 키가 있는지 확인하고, 그 키에 대한 값(문자의 개수)이 동일한지 비교한다.
조건에 맞지 않으면 “NO”를 반환한다. - 모든 조건을 만족하면 “YES”를 반환하여 두 문자열이 아나그램임을 나타낸다.
'자료구조 & 알고리즘 > Inflearn' 카테고리의 다른 글
[인프런 알고리즘] Chpater 4, 4번 문제(모든 아나그램 찾기) (0) | 2024.08.04 |
---|---|
[인프런 알고리즘] Chapter 4, 3번 문제(매출액의 종류) (0) | 2024.08.03 |
[인프런 알고리즘] Chapter 4, 1번 문제(학급 회장) (0) | 2024.07.28 |
[인프런 알고리즘] Chpater 3, 6번 문제(최대 길이 연속부분 수열) (0) | 2024.07.27 |
[인프런 알고리즘] Chpater 3, 5번 문제(연속된 자연수의 합) (0) | 2024.07.26 |