[프로그래머스/181855] 문자열 묶기

☑️ 문제

프로그래머스 181855

  • 주어진 문자열 배열 strArr 에서 같은 길이를 가진 문자열의 개수 중 최댓값을 구하는 문제

☑️ 풀이

첫 번째 풀이

//시간: 7.40ms
//메모리: 106MB

class Solution {
    public int solution(String[] strArr) {
        int[] check = new int[30];
        int max = 0;
        for (int i = 0; i < strArr.length; i++) {
            int size = strArr[i].length() - 1;
            check[size]++;
            max = Math.max(max, check[size]);
        }

        return max;
    }
}
  • check 배열을 사용하여 문자열 길이별 개수를 저장하였다.
  • Math.max(max, check[size]) 를 사용하여 최댓값을 지속적으로 갱신했고, 최종적으로 max 를 반환하였다.
  • 배열을 사용했기 때문에 실행속도가 빨랐다.

두 번째 풀이

//시간: 55.22ms
//메모리: 102MB

import java.util.*;

class Solution {
    public int solution(String[] strArr) {
        Map<Integer, Integer> map = new HashMap<>();
        int max = 0;
        for (int i = 0; i < strArr.length; i++) {
            int size = strArr[i].length();
            if (map.getOrDefault(size, 0) == 0) {
                map.put(size, 1);
            } else {
                map.put(size, map.get(size) + 1);
                max = Math.max(max, map.get(size));
            }
        }

        return max;
    }
}
  • HashMap 을 사용하여 문자열 길이를 Key, 개수를 Value 로 저장하였다.
    • HashMap 은 문자열 길이의 제한 없이 관리할 수 있다는 장점이 있지만, 이 문제는 문자열의 최대 길이가 고정되어 있기 때문에 배열을 사용하는 게 더 빨라보인다.

© 2021. All rights reserved.

yaejinkong의 블로그