문자열 배열 strArr이 주어집니다. strArr의 원소들을 길이가 같은 문자열들끼리 그룹으로 묶었을 때 가장 개수가 많은 그룹의 크기를 return 하는 solution 함수를 완성해 주세요.
이 문제 덕에 수천년 만에 HashMap을 사용한 것 같다. 배열을 사용하고 싶어도 내 선에서는 뾰족한 수가 떠오르지 않았다.
우선 문자열의 길이에 맞게 카운팅한 개수를 담은 map을 선언했다. 문제와 예시에서는 마치 문자열을 먼저 묶어야 할 것처럼 말했지만, 그렇게 하면 작업을 2번 하게 되니까 처음부터 개수를 세어 map에 put() 했다.
HashMap을 사용하기 위해 공부를 하던 와중 getOrDefault() 메서드를 알게 되었고, 제출 시 어떤 테스트 케이스가 존재할지 모르니 추가해 보았다. 이 메서드는 1번 인자인 key에 해당하는 값이 없을 경우 기본값을 반환한다. 나는 그렇게 만일을 위한 기본값을 설정한 뒤, 존재할 경우에는 +1 하여 해당 length를 key로 갖는 값에 1을 더해주었다. (일종의 카운팅)
이후에는 values()로 map의 값을 꺼내어 개수를 반환 받은 뒤, 개중에서 Math.max()로 가장 큰 값을 반환하게끔 했다.
import java.util.HashMap;
class Solution {
public int solution(String[] strArr) {
int answer = 0;
HashMap<Integer, Integer> lenMap = new HashMap<>();
for(String str : strArr) {
int length = str.length();
lenMap.put(length, lenMap.getOrDefault(length, 0) + 1);
}
for (int count : lenMap.values()) {
answer = Math.max(answer, count);
}
return answer;
}
}
