문자열 묶기

nacSeo (낙서)·2024년 3월 2일
0

프로그래머스

목록 보기
111/169

문제 설명

문자열 배열 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을 통한 풀이를 떠올려야겠다.

  • getOrDefault(Object Key, V defaultValue)
    - key: 찾고자 하는 값의 키
    - defaultValue: 키에 해당하는 값이 없을 때 반환할 기본값
    • 주어진 키에 해당하는 값이 존재하는 경우 해당 값을 반환하고, 키에 해당하는 값이 존재하지 않는 경우 지정된 기본값을 반환
  • values()
    • 저장된 모든 값을 Collection에 담아 리턴
profile
백엔드 개발자 김창하입니다 🙇‍♂️

0개의 댓글