본문 바로가기
기초다지기/JS 코딩테스트

javascript 배열내 길이가 같은 문자열이 가장 많은 갯수

by 김빵그 2023. 8. 20.

문제

문자열 배열 strArr가 주어질 때 길이가 같은 문자열들을 그룹으로 묶고, 그 중 가장 갯수가 많은 그룹의 크기를 찾아 반환

내 해답

function solution(strArr) {
  // 길이별 그룹을 저장할 빈 객체 생성
  const groups = {};

  // 주어진 문자열 배열을 순회하며 그룹 형성과 카운트
  strArr.forEach(str => {
    const length = str.length;  // 현재 문자열의 길이
    groups[length] = (groups[length] || 0) + 1; // 해당 길이 그룹의 값을 증가시킴
  });

  // 그룹 중 가장 큰 값을 찾아 반환
  return Math.max(...Object.values(groups));
}
  • groups : 빈 객체 생성 
  • groups[length] : 값이 존재한다면 이미 해당 그룹에 값을 가지고 있어 그 값을 가져와 +1
  • 값이 존재하지 않는다면 0을 반환후 +1
  • ["a","bc","def"..] 예시
  • 첫번째 문자열 "a" 길이는 1 groups[1]에 1을 더한다 이때 groups[1]은 존재하지 않아 0이 된 후 1을 더해 groups[1]에 1이 저장
  • Object.values(groups) 은 groups 객체의 값들을 배열로 추출하는 역할을 한다
  • 배열로 만들어진 후 Math.max를 사용하여 가장 큰 값을 찾아 반환 

다른 해답

function solution(strArr) {
    let ans = Array(31).fill(0); // 길이별 그룹 개수를 저장할 배열 생성
    for (let s of strArr) ans[s.length]++; // 주어진 문자열 길이의 그룹 개수 증가
    return Math.max(...ans); // 가장 큰 그룹 크기 반환
}
function solution(strArr) {
    const aa = strArr.map((v)=>v.length); // 문자열 배열의 길이만을 추출한 배열 생성
    const count = {}; // 길이별 그룹 개수를 저장할 객체 생성
    for (let i = 0; i < aa.length; i++) {
        count[aa[i]] = count[aa[i]] ? count[[aa[i]]] + 1 : 1; // 길이별 그룹 개수 증가
    }
    return Object.values(count).sort((a, b) => b - a)[0]; // 가장 큰 그룹 크기 반환
}

 


머리가 돌아가지 않아..구글링과 chat gpt의 힘을 빌려 풀었다..이게 푼건가 싶기도 하지만 ㅠㅠ 왜 머리가 턱하고 막힌 기분이드는건지...