문자열 묶기
문제 설명
문자열 배열 strArr이 주어집니다. strArr의 원소들을 길이가 같은 문자열들끼리 그룹으로 묶었을 때 가장 개수가 많은 그룹의 크기를 return 하는 solution 함수를 완성해 주세요.
입출력 예
strArr | result |
["a","bc","d","efg","hi"] | 2 |
입출력 예 #1
- 각 문자열들을 길이에 맞게 그룹으로 묶으면 다음과 같습니다.
문자열 길이 | 문자열 목록 | 개수 |
1 | ["a","d"] | 2 |
2 | ["bc","hi"] | 2 |
3 | ["efg"] | 1 |
- 개수의 최댓값은 2이므로 2를 return 합니다.
나의 풀이
function solution(strArr) {
const sortedArr = strArr.sort((a, b) => b.length - a.length);
let numArr = strArr.reduce((arr, str) => {
arr[str.length - 1]++;
return arr;
}, Array(sortedArr[0].length).fill(0))
return numArr.sort((a, b) => a - b)[numArr.length - 1];
}
처음부터 `reduce()`를 사용해서 풀어야겠다고 생각했고 거기에 코드를 붙이다 보니 많이 지저분해졌다..
- strArr 배열 안에서 가장 긴 문자열의 길이를 구하기 위해 각 요소의 문자열 길이 순으로 정렬한다.
- `reduce()` 메서드를 이용하는데 초기값으로 가장 큰 문자열의 길이만큼 0을 요소로 가지는 배열을 초기값으로 설정한다. 예를 들면 [0, 0, 0, 0]
- `reduce()` 메서드를 실행하며 각 요소의 문자열 길이를 구해서, 초기값으로 설정한 배열에 해당 인덱스(현재 문자열의 길이)로 접근해 +1을 한다.
- `reduce()` 메서드의 결과 값 numArr를 다시 sort 해서 원소들을 길이가 같은 문자열들끼리 그룹으로 묶었을 때 가장 개수가 많은 그룹의 크기를 return 한다.
다른 사람의 풀이 01
function solution(strArr) {
let ans = Array(31).fill(0);
for (let s of strArr) ans[s.length]++
return Math.max(...ans)
}
문제의 제한사항에 각 원소의 최대 길이가 30으로 제시되어 있기 때문에 31의 길이를 가진 배열을 생성한다. 그리고 `Math.max()`를 이용해서 출력한 배열의 최댓값을 바로 찾는다.
다른 사람의 풀이 02
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]
}
배열이 아닌 객체를 사용한 풀이 방법. 해당 풀이로 테스트 케이스를 실행했을 때 count로 {"1":2,"2":2,"3":1} 객체가 출력되는데 이 객체에 `Object.values()` 메서드를 이용해 객체의 value만 추출한 [2, 2, 1]로 변환한 후 `sort()` 메서드를 사용한다.
사실 알고리즘 문제 풀 때 객체로 접근하는 방식은 거의 경험이 없는데 앞으로는 객체 사용에도 익숙해지도록 노력해야겠다.
Object.values()
const object1 = {
a: 'somestring',
b: 42,
c: false,
};
console.log(Object.values(object1));
// Expected output: Array ["somestring", 42, false]
- Object.values() 메서드는 전달된 파라미터 객체가 가지는 (열거 가능한) 속성의 값들로 이루어진 배열을 리턴합니다.
- 출처 https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Object/values
'알고리즘 > Programmers' 카테고리의 다른 글
[TIL] 2023.08.17 Programmers_커피 신부름 (0) | 2023.08.17 |
---|---|
[TIL] 2023.08.16 Programmers_숨어있는 숫자의 덧셈 (2) (0) | 2023.08.16 |
[TIL] 2023.08.14 Programmers_세 개의 구분자 (0) | 2023.08.15 |
[TIL] 2023.08.13 Programmers_빈 배열에 추가, 삭제하기 (0) | 2023.08.13 |
[TIL] 2023.08.11 Programmers_날짜 비교하기 (0) | 2023.08.11 |
댓글