HashMap 을 이용해서 풀었습니다.
문자열A 에 있는 알파벳들의 순서를 바꿔 문자열B 를 만들 수만 있다면 애너그램인줄 알았는데 아니였습니다.
문자열A 에 있는 알파벳들을 전부 사용하지 않고 문자열B 를 만든다면 애너그램에 해당되지 않습니다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.StringTokenizer;
public class p6996 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuffer sb = new StringBuffer();
int N = Integer.parseInt(br.readLine());
StringTokenizer st;
String A, B;
boolean result;
for(int i=0; i<N; i++) {
st = new StringTokenizer(br.readLine());
A = st.nextToken();
B = st.nextToken();
result = anagram(A, B);
sb.append(A + " & " + B + " ");
if(result)
sb.append("are anagrams.\n");
else
sb.append("are NOT anagrams.\n");
}
System.out.println(sb);
}
public static boolean anagram(String s1, String s2){
HashMap<Character, Integer> map = new HashMap<>();
//처음 입력한 문자열 문자 배열로 바꾸고 문자 하나씩 가져와 map에 넣기
//처음 입력된 문자면 1로, 이전에 입력된 문자라면 +1
for(char x : s1.toCharArray()){
map.put(x, map.getOrDefault(x, 0) + 1);
}
//두번째에 입력한 문자열을 문자 배열로 바꿔 문자 하나씩 가져온다
//해당 문자가 키값으로 존재하지 않거나 해당 문자의 키값이 0이면
for(char x : s2.toCharArray()){
if(!map.containsKey(x) || map.get(x) == 0) {
return false;
}
//해당 문자를 키로 갖고있는 값 -1
map.put(x, map.get(x) - 1);
}
//map 에서 값이 0이 아니면, 문자열 A의 알파벳이 남아있다면 아나그램 아님
for (Character c : map.keySet()) {
if(map.get(c) != 0)
return false;
}
return true;
}
}
'Baekjoon' 카테고리의 다른 글
[준] 5576번 -콘테스트 - Java (0) | 2022.12.11 |
---|---|
[백준] 1766번 - 문제집 - Java (0) | 2022.12.11 |
[백준] 1431번 - 시리얼 번호 - Java (0) | 2022.12.09 |
[백준] 5635번 - 생일 - Java (0) | 2022.12.04 |
[백준] 11557번 - Yangjojang of The Year - Java (0) | 2022.12.03 |
댓글