본문 바로가기
코딩 테스트/프로그래머스 (기초)

[C#][프로그래머스 > 코딩테스트 기초] 문자열 묶기

by 스누ㅍl 2024. 8. 2.

프로그래머스 > 코딩테스트 연습 > 코딩 기초 트레이닝 > 문자열 묶기

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();
    }
}

 

참고 사이트

겹치는 항목 찾기 : https://itiformation.tistory.com/entry/Linq-GroupBy-OrderBy%EB%A9%94%EC%86%8C%EB%93%9C-%EC%82%AC%EC%9A%A9%EB%B2%95

📝 풀이

요즘 Linq 메서드를 활용해서 문제를 풀어보려고 하고 있는 중이다.

strArr의 요소들의 길이를 먼저 뽑아서(Select) 같은 값끼리 그룹을 지어주고(GroupBy)   다시 각 그룹의 길이를 뽑아(Select) 가장 큰 값을 반환 했다(Aggregate).

 

문제를 해결하고 다른 사람의 풀이를 찾아보다 비슷한 접근인데 더 간단한 방식으로 코드를 작성한 사람이 있었다.

애초에 strArr의 요소들의 길이로 그룹을 지어주고(GroupBy) 각 그룹의 크기가 큰 순서대로 정렬을 시켜주고(OrderByDescending) 가장 첫번째 값의(First) 크기를 반환했다(Count).

 

GroupBy를 사용하면서 데이터 형태가 긴가민가 했는데 이번 기회에 확실히 짚고 넘어갔다.


관련 내용

 

[C# 문법] Enumerable 클래스

최근 수정: 2024.08.02Enumerable 클래스 내용 중 새로 알게되거나 사용했던 메서드들 기록하는 곳입니다. Enumerable 클래스Enumerable 클래스는 LINQ의 일부로 IEnumerable 인터페이스를 구현하는 컬렉션 클래

twd0622.tistory.com