프로그래머스 > 코딩테스트 연습 > 코딩 기초 트레이닝 > 문자열 묶기
https://school.programmers.co.kr/learn/courses/30/lessons/181855
📒 문제
문자열 배열 strArr이 주어집니다. strArr의 원소들을 길이가 같은 문자열들끼리 그룹으로 묶었을 때 가장 개수가 많은 그룹의 크기를 return 하는 solution 함수를 완성해 주세요.
제한사항
- 1 ≤ strArr의 길이 ≤ 100,000
- 1 ≤ strArr의 원소의 길이 ≤ 30
- strArr의 원소들은 알파벳 소문자로 이루어진 문자열입니다.
입출력 예
strArr | result |
["a","bc","d","efg","hi"] | 2 |
입출력 예 설명
입출력 예 #1
- 각 문자열들을 길이에 맞게 그룹으로 묶으면 다음과 같습니다.
-
문자열 길이 문자열 목록 개수 1 ["a","d"] 2 2 ["bc","hi"] 2 3 ["efg"] 1 - 개수의 최댓값은 2이므로 2를 return 합니다.
💻 소스코드
using System;
using System.Linq;
public class Solution {
public int solution(string[] strArr) {
return strArr.Select(s => s.Length)
.GroupBy(g => g)
.Select(s => s.Count())
.Aggregate((cur, next) => cur >= next ? cur : next);
}
}
다른 풀이
using System;
using System.Linq;
public class Solution {
public int solution(string[] strArr) {
return strArr.GroupBy(g => g.Length)
.OrderByDescending(o => o.Count())
.First()
.Count();
}
}
※ 참고 사이트
📝 풀이
요즘 Linq 메서드를 활용해서 문제를 풀어보려고 하고 있는 중이다.
strArr의 요소들의 길이를 먼저 뽑아서(Select) 같은 값끼리 그룹을 지어주고(GroupBy) 다시 각 그룹의 길이를 뽑아(Select) 가장 큰 값을 반환 했다(Aggregate).
문제를 해결하고 다른 사람의 풀이를 찾아보다 비슷한 접근인데 더 간단한 방식으로 코드를 작성한 사람이 있었다.
애초에 strArr의 요소들의 길이로 그룹을 지어주고(GroupBy) 각 그룹의 크기가 큰 순서대로 정렬을 시켜주고(OrderByDescending) 가장 첫번째 값의(First) 크기를 반환했다(Count).
GroupBy를 사용하면서 데이터 형태가 긴가민가 했는데 이번 기회에 확실히 짚고 넘어갔다.
관련 내용
'코딩 테스트 (C#) > 프로그래머스 (기초)' 카테고리의 다른 글
[C#][프로그래머스 > 코딩테스트 기초] 배열의 원소 삭제하기 (0) | 2024.08.12 |
---|---|
[C#][프로그래머스 > 코딩테스트 기초] 전국 대회 선발 고사 (0) | 2024.08.02 |
[C#][프로그래머스 > 코딩테스트 기초] 배열 만들기 6 (0) | 2024.08.01 |
[C#][프로그래머스 > 코딩테스트 기초] 배열의 원소만큼 추가하기 (0) | 2024.08.01 |
[C#][프로그래머스 > 코딩테스트 기초] 공백으로 구분하기 2 (0) | 2024.07.31 |