56. [Java] 문자열 묶기
https://school.programmers.co.kr/learn/courses/30/lessons/181855
- 입력: 문자열 배열 strArr
- 목표:
- 문자열들을 길이별로 그룹으로 나눔
- 그중에서 가장 많은 문자열이 있는 그룹의 크기를 retuirn
- 1 ≤ strArr의 길이 ≤ 100,000
- 1 ≤ strArr의 원소의 길이 ≤ 30
- strArr의 원소들은 알파벳 소문자로 이루어진 문자열
정답코드
import java.util.*;
class Solution {
public int solution(String[] strArr) {
// 문자열 길이 key
Map<Integer, Integer> lenCnt = new HashMap<>();
for (String s : strArr) {
int len = s.length();
lenCnt.put(len, lenCnt.getOrDefault(len, 0) + 1);
}
// 제일 큰 그룹 크기
int max = 0;
for (int cnt : lenCnt.values()) {
max = Math.max(max, cnt);
}
return max;
}
}
문자열 길이를 key로 하고, 그 길이에 해당하는 개수를 세는 Map 문제이다.
Map<Integer, Integer>
를 이용해서 문자열 길이별로 개수 카운트- 각 문자열의 길이를 기준으로 개수 누적
lengthCount
에 저장된 값들 중 가장 큰 값을 찾아서 return
✅ lengthCount
lenCnt.put(len, lenCnt.getOrDefault(len, 0) + 1);
위 코드는 Map<Integer, Integer> lenCnt
에서 문자열 길이 len
에 해당하는 값을 1씩 증가시키는 역할을 한다.
자바에서 자주 쓰이는 Map 누적 카운팅 패턴이다.
이걸 if문으로 풀어 쓰면 다음과 같다.
if (lenCnt.containsKey(len)) {
int count = lenCnt.get(len); // 이미 있으면 기존 값 가져오기
lenCnt.put(len, count + 1); // 1 증가시켜서 다시 저장
} else {
lenCnt.put(len, 1); // 없으면 1부터 시작
}
containsKey(len)
: 해당 key가 이미 Map에 존재하는지 확인하기get(len)
: key에 해당하는 현재 값을 가져오기put(len, 값)
: key에 새로운 값을 저장하기
lenCnt.getOrDefault(len, 0)
getOrDefault(len, 0)
는 Map
에서 key가 len
인 값을 가져오는 메서드이다. 이미 있는 문자열 길이면 개수를 가져오고, 만약 해당 key(len
)가 존재하지 않으면, 기본값으로 0을 반환한다.
lenCnt.getOrDefault(len, 0) + 1
- 현재 길이에 해당하는 문자열 개수에 1을 더한다는 뜻이다.