
내가 생각했을때 문제에서 원하는부분
문자열 배열 strArr이 주어집니다.
strArr의 원소들을 길이가 같은 문자열들끼리 그룹으로 묶었을 때 가장 개수가 많은 그룹의 크기를 return 하는 solution 함수를 완성해 주세요.
내가 이 문제를 보고 생각해본 부분
HashMap<Integer, Integer> lengthCountMap = new HashMap<>();
길이를 key로, 해당 길이 문자열의 개수를 value로 저장하는 맵을 생성하였다.
for (String s : strArr) { ... } 반복문에서 배열의 각 문자열을 순회한다.
int length = s.length();를 통해 현재 문자열의 길이를 구했다.
lengthCountMap.put(length, lengthCountMap.getOrDefault(length, 0) + 1);
지도에서 해당 길이의 문자열 개수를 가져오거나 (없으면 0), 1을 더해 저장한다.
이렇게 하면 길이별로 문자열 개수를 집계한다.
int maxCount = 0;를 초기화하여 최대 그룹 크기를 저장할 변수를 선언했다.
for (int count : lengthCountMap.values()) { ... } 반복문에서 맵의 모든 그룹 개수를 순회한다.
if (count > maxCount) { maxCount = count; }
현재 그룹의 크기가 기존 최대값보다 크면 갱신한다.
결국 가장 큰 그룹 크기가 maxCount에 저장된다.
return maxCount;로 최종적으로 가장 많은 문자열이 모인 그룹의 크기를 반환한다.
main 메서드에서는 예제로 문자열 배열 {"a", "bc", "d", "efg", "hi"}를 호출하여
결과 출력으로 2가 찍히게 한다.
코드로 구현
import java.util.HashMap;
class Solution {
public int solution(String[] strArr) {
HashMap<Integer, Integer> lengthCountMap = new HashMap<>();
for (String s : strArr) {
int length = s.length();
lengthCountMap.put(length, lengthCountMap.getOrDefault(length, 0) + 1);
}
int maxCount = 0;
for (int count : lengthCountMap.values()) {
if (count > maxCount) {
maxCount = count;
}
}
return maxCount;
}
}
프로그래머스 코드
package programmers;
import java.util.HashMap;
// 프로그래머스 문자열 묶기
public class Main90 {
public static int solution(String[] strArr) {
HashMap<Integer, Integer> lengthCountMap = new HashMap<>();
for (String s : strArr) {
int length = s.length();
lengthCountMap.put(length, lengthCountMap.getOrDefault(length, 0) + 1);
}
int maxCount = 0;
for (int count : lengthCountMap.values()) {
if (count > maxCount) {
maxCount = count;
}
}
return maxCount;
}
public static void main(String[] args) {
String[] test = {"a", "bc", "d", "efg", "hi"};
int result = solution(test);
System.out.println(result);
}
}
위에 있는 코드를 변경한 코드
코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.