Notice
Recent Posts
Recent Comments
Link
개발자는 기록이 답이다
자바(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));
}
}
'알고리즘 > 인프런 - Java알고리즘 입문' 카테고리의 다른 글
자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비(Hash, sliding window : 시간복잡도 O(n)_모든 아나그램 찾기) (0) | 2023.09.30 |
---|---|
자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비(Hash, sliding window_매출액의 종류) (0) | 2023.09.29 |
자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비(HashMap, TreeSet(해쉬, 정렬지원 Set)_학급 회장_HashMap) (0) | 2023.09.29 |
자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비(복합적 문제_최대 길이 연속부분수열) (0) | 2023.09.29 |
자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비(수학_연속된 자연수의 합) (0) | 2023.09.28 |