[프로그래머스/Java] Lv.0 문자열 묶기

febCho·2024년 3월 17일
0

코딩테스트

목록 보기
100/253
post-thumbnail

문제

문자열 배열 strArr이 주어집니다. strArr의 원소들을 길이가 같은 문자열들끼리 그룹으로 묶었을 때 가장 개수가 많은 그룹의 크기를 return 하는 solution 함수를 완성해 주세요.

- 제한사항

  • 1 ≤ strArr의 길이 ≤ 100,000
  • 1 ≤ strArr의 원소의 길이 ≤ 30
  • strArr의 원소들은 알파벳 소문자로 이루어진 문자열입니다.

풀이

이 문제 덕에 수천년 만에 HashMap을 사용한 것 같다. 배열을 사용하고 싶어도 내 선에서는 뾰족한 수가 떠오르지 않았다.

우선 문자열의 길이에 맞게 카운팅한 개수를 담은 map을 선언했다. 문제와 예시에서는 마치 문자열을 먼저 묶어야 할 것처럼 말했지만, 그렇게 하면 작업을 2번 하게 되니까 처음부터 개수를 세어 map에 put() 했다.

HashMap을 사용하기 위해 공부를 하던 와중 getOrDefault() 메서드를 알게 되었고, 제출 시 어떤 테스트 케이스가 존재할지 모르니 추가해 보았다. 이 메서드는 1번 인자인 key에 해당하는 값이 없을 경우 기본값을 반환한다. 나는 그렇게 만일을 위한 기본값을 설정한 뒤, 존재할 경우에는 +1 하여 해당 length를 key로 갖는 값에 1을 더해주었다. (일종의 카운팅)

이후에는 values()로 map의 값을 꺼내어 개수를 반환 받은 뒤, 개중에서 Math.max()로 가장 큰 값을 반환하게끔 했다.

import java.util.HashMap;

class Solution {
    public int solution(String[] strArr) {
        int answer = 0;
        HashMap<Integer, Integer> lenMap = new HashMap<>();
        
         for(String str : strArr) {
            int length = str.length();
            lenMap.put(length, lenMap.getOrDefault(length, 0) + 1);
        }
        
        for (int count : lenMap.values()) {
            answer = Math.max(answer, count);
        }
        
        return answer;
    }
}

결과

profile
Done is better than perfect.

0개의 댓글