문제
코드
package prep.test.coding;
import java.util.HashMap;
import java.util.Scanner;
public class Anagram {
public String solution(String str1, String str2) {
HashMap<Character, Integer> map = new HashMap<>();
for(char idx : str1.toCharArray()) {
map.put(idx, map.getOrDefault(idx,0)+1);
}
for(char idx : str2.toCharArray()) {
// 만약 str2에 있는 문자가 map의 key 중에 없거나
// 해당 key의 value가 0이면
if(!map.containsKey(idx) || map.get(idx)==0 ) {
return "NO";
}
map.put(idx, map.getOrDefault(idx, 0) -1);
}
return "YES";
}
public static void main(String[] args) {
Anagram T = new Anagram();
Scanner kb = new Scanner(System.in);
String str1 = kb.next();
String str2= kb.next();
System.out.println(T.solution(str1, str2));
}
}
로직:
- str1과 str2이 아나그램이라면,
- str1을 구성하는 문자를 key, 각 문자의 갯수를 value로 하는 map을 만든 후
- str2 -> .toCharArray를 통해 char[] 배열로 만든 후, 해당 배열을 돌면서 map에서 일치하는 문자를 만날 때마다 갯수를 -1씩 줄여나갈 수 있어야함
- 만약 map에 해당 key가 존재하지 않거나, 해당 key로 검색되는 value의 값이 0이라면 아나그램이 아니므로 바로 return
- str2배열을 끝까지 돌때까지 위 조건에 걸리지 않는다면, 아나그램이므로 "YES" return
학습내용
HashMap 메소드
- getOrDefault
- containsKey(키명): hashmap의 key 중 해당 key가 있는지 확인 (boolean반환)
- put(key, value)
출처
'Algorithm (Java) > 인프런 알고리즘강의' 카테고리의 다른 글
[인프런/알고리즘] HashMap - 학급회장 (0) | 2023.04.26 |
---|---|
[인프런/알고리즘] 문자열 - 가장 짧은 문자거리 (0) | 2023.04.25 |
[인프런/알고리즘] 문자열 - 회문 문자열 (0) | 2023.04.25 |
[인프런/알고리즘] 문자열 - 특정문자 뒤집기 (0) | 2023.04.25 |
[인프런/알고리즘] 문자열 - 문장 내 가장 긴 단어 출력하기 (0) | 2023.04.25 |