▶객체(Dictionary)를 활용한 간단한 문제가 있어 정리해보고자 합니다.
문제설명
문자열 배열 strArr이 주어집니다. strArr의 원소들을 길이가 같은 문자열들끼리 그룹으로 묶었을 때 가장 개수가 많은 그룹의 크기를 return 하는 solution 함수를 완성해 주세요.
제한사항
- 1 ≤ strArr의 길이 ≤ 100,000
- 1 ≤ strArr의 원소의 길이 ≤ 30
- strArr의 원소들은 알파벳 소문자로 이루어진 문자열입니다.
입출력 예 & 설명
입출력 예 #1
- 각 문자열들을 길이에 맞게 그룹으로 묶으면 다음과 같습니다.
- 개수의 최댓값은 2이므로 2를 return 합니다.
나의 풀이
key 값과 value를 각각 저장하기 위하여 앞선 객체(Dictionary) 포스팅에서 알아보았던 ▶객체(Dictionary)를 사용했습니다.
문자열 길이(key) | 문자열 개수(value) |
1 | 2 |
2 | 2 |
3 | 1 |
인덱스를 문자열로 접근이 가능하다는 객체의 특성과 위 표처럼 key와 value를 pair형식으로 저장하기 위하여 객체(Dictionary)를 사용했습니다.
먼저 2번째 줄에서 빈 객체 dict을 선언해 주고, 4번째 줄에서 for of문을 사용하여 문자열 배열 strArr의 요소에 접근했습니다.
그리고 위 표처럼 key값(인덱스)을 문자열의 길이로 저장해 줍니다.
그리고 예전 nullish 포스팅에서 알아본 nullish 연산자 '??'를 사용하여 왼쪽 피연산자가 null이나 undefined일 때 오른쪽 피연산자를 반환해 줍니다.
즉 x가 담긴 딕셔너리가 있으면 그 인덱스에 x값을 넣어주고 만약 이전에 등장한 적이 없는 값이라면 빈 딕셔너리를 담아줍니다. 그리고 해당 인덱스에 값을 넣어줍니다.
말이 어려운데 쉽게 표현하자면 위의 그림을 보시면 이해가 좀 더 쉽습니다.
x : a일 때 한 번도 등장하지 않았기 때문에 빈 딕셔너리를 넣어주고, push() 함수를 사용하여 x값을 넣어주고, bc 또한 처음 등장하기 때문에 빈 딕셔너리 에 x값을 넣어주었습니다.
그리고 d는 길이가 1이기 때문에 dict [1]은 값이 존재하기 때문에 해당 인덱스에 b값을 넣어줍니다. 이런 식으로 strArr의 요소를 끝까지 돌아줍니다.
그리고 9번째 줄에서 Object.values 메서드를 사용하여 객체의 값에 접근해 주고, map() 함수를 사용하여 dict의 요소를 [ 'a', 'd' ], [ 'bc' ], [ 'efg' ] → [2, 2, 1] 형식으로 길이로 바꿔줍니다.
마지막으로 Math메서드를 사용하여 배열의 요소 중 가장 큰 값(Max)을 반환해 주어 마무리했습니다.
'Coding Test > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 조건에 맞게 수열 변환하기 2 (JavaScript) (0) | 2024.02.12 |
---|---|
[프로그래머스] 리스트 자르기 (JavaScript) (0) | 2024.02.12 |
[프로그래머스] 세 개의 구분자 (JavaScript) (1) | 2024.02.09 |
[프로그래머스] 배열의 길이를 2의 거듭제곱으로 만들기 (JavaScript) (0) | 2024.02.08 |
[프로그래머스] 문자열이 몇 번 등장하는지 세기 (JavaScript) (1) | 2024.02.07 |