문제 설명
문자열 배열 strArr이 주어집니다. strArr의 원소들을 길이가 같은 문자열들끼리 그룹으로 묶었을 때 가장 개수가 많은 그룹의 크기를 return 하는 solution 함수를 완성해 주세요.
제한사항
1 ≤ strArr의 길이 ≤ 100,000 1 ≤ strArr의 원소의 길이 ≤ 30 strArr의 원소들은 알파벳 소문자로 이루어진 문자열입니다.
나의 코드
import java.util.Map;
import java.util.HashMap;
class Solution {
public int solution(String[] strArr) {
Map<Integer, Integer> groupCount = new HashMap<>();
for(String str : strArr) {
int length = str.length();
groupCount.put(length, groupCount.getOrDefault(length, 0)+1);
}
int answer = 0;
for(int count : groupCount.values()) {
answer = Math.max(answer, count);
}
return answer;
}
}
다른 사람 코드
class Solution {
public int solution(String[] strArr) {
int answer = 0;
int[] lengArr = new int[31];
for(int i=0; i<strArr.length; i++) {
lengArr[strArr[i].length()]++;
}
for(int i=0; i<=30; i++) {
answer = Math.max(answer, lengArr[i]);
}
return answer;
}
}
느낀 점
어떻게 풀어야할지 길을 못찾아서 여러 방법들을 찾아보며 공부하면서 풀었다 🥲 먼저, 길이별로 count를 해줘야하기 때문에, HashMap
을 사용하여 키와 값 쌍으로 저장할 수 있게 했다. strArr
의 요소들을 돌며 해당하는 길이와 그 길이가 없는 경우 0으로 설정하고 +1
시켜주고, 길이가 있는 경우 length
에다가 +1
해주는 로직을 getOrDefault()
함수를 사용하여 짰다. 그리고 values()
함수를 이용하여 해당 HashMap
의 값
들을 돌며 Math.max()
함수를 통해 최대값을 찾아냈다.
다른 사람 코드는 제한사항에 strArr
원소의 최대 길이는 30이므로 31의 길이를 가진 int
배열을 선언하고, strArr
을 돌며 나오는 원소의 길이 자리의 요소를 증가시켜줬다. 마지막으로, lengArr
을 돌며 마찬가지로 Math.max()
함수를 사용해 최대값을 구해냈다.
알고리즘을 풀면서 처음 사용해본 HashMap
을 사용하여 풀어냈는데, 처음 사용해본만큼 낯선 메소드들이 많이 존재했고, 사용하며 공부했다. 앞으로 키와 값 쌍으로 저장을 해야하는 문제가 있는 경우 HashMap
을 통한 풀이를 떠올려야겠다.
key
: 찾고자 하는 값의 키defaultValue
: 키에 해당하는 값이 없을 때 반환할 기본값