최근 two pointers와 sliding window를 사용하여 시간복잡도를 줄이는 알고리즘 문제를 한창 풀다가
HashMap을 활용한 알고리즘 문제풀이로 넘어와서 공부중이다.
Hash에 대한 개념 정리는 이미 책을 통해 한 번 훑었지만 추후에 글로 정리해보기로하고,
오늘은 알고리즘 문제들을 몇 개 풀면서 알게된 HashMap관련 메소드들을 차근차근 정리해보려고한다.
[간단 문제 설명]
어떤 문자열에서 가장 많이 출현하는 문자가 무엇인지 출력하면 된다.
배열과 반복문을 사용해서도 풀 수 있겠지만, 해시를 사용하면 훨씬 간단하고 빠르게 문제를 해결할 수 있다.
(HashTable은 데이터의 해시값을 테이블 내 주소로 활용하기 때문에 탐색에 있어서는 이진탐색보다도 강력하다고 할 수 있음)
아래는 솔루션 코드이다. 해시와 관련된 기본적인 메소드 몇 가지만 알면 쉽게 풀 수 있다.
public char solution(String s){
HashMap<Character, Integer> map=new HashMap<>(); //HashMap<key의 자료형, value의 자료형> 변수명
for(char x: s.toCharArray()){ //입력 받은 문자열을 문자배열로 바꿈
map.put(x, map.getOrDefault(x, 0)+1); // HashMap에 각 문자를 key로 지정, 문자의 출현 횟수를 Value로 저장함.
}
int max=Integer.MIN_VALUE;
char answer='0';
for(char x:map.keySet()){ //각 key의 Value값을 비교. 더 큰 값을 answer에 저장한다.
if(map.get(x)>max){
max=map.get(x);
answer=x;}
}
return answer;
}
.put(key, value)
HashMap의 특정 key에 원하는 value값을 입력한다.
public static void main(String[] args) {
HashMap<Character, Integer> map=new HashMap<>(); //key값으로 char, value값으로 int형 자료를 갖는 HashMap생성
map.put('a',1); //key='a', value=1
map.put('b',2); //key='b', value=2
map.put('c',3); //key='c', value=3
for(char x: map.keySet()){
System.out.println(x+" "+map.get(x));
}
}
출력 결과
a 1
b 2
c 3
.get(key)
특정 key에 해당하는 value값을 출력한다.
public static void main(String[] args) {
HashMap<Character, Integer> map=new HashMap<>();
map.put('a',1);
map.put('b',2);
map.put('c',3);
System.out.println(map.get('c')); //key 'c'에 해당하는 value값 출력
System.out.println(map.get('b')); //key 'b'에 해당하는 value값 출력
System.out.println(map.get('a')); //key 'a'에 해당하는 value값 출력
}
출력 결과
3
2
1
.getOrDefault(key, default value)
특정 key에 해당하는 value값을 출력한다.
만약 key에 해당하는 value값이 null일경우 사용자가 설정한 default 값을 출력한다.
public static void main(String[] args) {
HashMap<Character, Integer> map=new HashMap<>();
map.put('a', 1); //HashMap에 'a'의 value값만 입력
//default값은 0으로 지정
System.out.println('c'+" "+map.getOrDefault('c',0)); //key 'c'의 value 출력
System.out.println('a'+" "+map.getOrDefault('a',0)); //key 'a'의 value 출력
}
출력 결과
c 0 //HashMap에서 'c'의 value는 null이었기 때문에 default값 0 출력
a 1 //HashMap에서 'a'의 value는 1이었기 때문에 default값은 출력되지 않음
.keySet()
HashMap의 key들을 배열 형태로 출력한다.
public static void main(String[] args) {
HashMap<Character, Integer> map=new HashMap<>();
map.put('a', 1);
map.put('b', 1);
map.put('c', 1);
System.out.println(map.keySet());
}
출력 결과
[a, b, c]
'프로그래밍 > JAVA 프로그래밍' 카테고리의 다른 글
[코딩연습_JAVA] 올바른 괄호 (0) | 2024.02.17 |
---|---|
[코딩연습_JAVA] K번째 큰 수 (0) | 2024.02.14 |
[코딩연습_JAVA] 연속 부분수열 (1) | 2024.02.06 |
[코딩연습_JAVA] 봉우리 (0) | 2024.01.31 |
[코딩연습_JAVA] 격자판 최대합 구하기 (1) | 2024.01.31 |