<Programmers> 문자열 묶기

·2024년 10월 26일
0

프로그래머스

목록 보기
13/18
post-thumbnail

Object.values()
Math.max()

문제

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


문제 접근

  1. 원소 길이가 같은 것들을 그룹화해야한다. ➡️ 하나의 객체 안에서 길이에 따른 그룹화?
  2. 해당 객체 내부 배열의 길이 중, 최댓값 출력

문제 풀이

function solution(strArr) {
  let obj = {};

  for (let str of strArr) {
    obj[str.length] = obj[str.length] || [];
    obj[str.length].push(str);
  }

  const valuesArr = Object.values(obj).map((item) => item.length);

  console.log(...valuesArr);
  console.log(Math.max(...valuesArr));

  return Math.max(...valuesArr);
}

solution(["a", "bc", "d", "efg", "hi"]); // 2

풀이 핵심 포인트

for (let str of strArr) {
    obj[str.length] = obj[str.length] || [];
    obj[str.length].push(str);
  }
  1. obj[str.length]이 없으면, 빈 배열을 생성.
    예를 들어 obj[1]이 없음. ➡️ 따라서 빈 배열 생성.
    !! 객체의 key값으로 value에 접근 !!
  2. obj[str.length]str을 추가.
    예를 들어 ➡️ obj[1]의 배열에 str을 추가

다른 풀이

  1. 리팩토링 코드
function solution(strArr) {
  let obj = {};

  for (let str of strArr) {
    obj[str.length] = obj[str.length] ?? [];  // `||` 대신 `??` 사용 가능
    obj[str.length].push(str);
  }

  const valuesArr = Object.values(obj).map((item) => item.length);
  const maxGroupSize = Math.max(...valuesArr);

  return maxGroupSize;
}

해당 문제를 접하면서 객체형식 다루는 지식을 더 넓힐 수 있었다.

profile
- 배움에는 끝이 없다.

0개의 댓글