Level. 0
문제
문자열 배열 strArr이 주어집니다.
strArr의 원소들을 길이가 같은 문자열들끼리 그룹으로 묶었을 때 가장 개수가 많은 그룹의 크기를 return 하는 solution 함수를 완성해 주세요.
* 제한사항
- 1 ≤ strArr의 길이 ≤ 100,000
- 1 ≤ strArr의 원소의 길이 ≤ 30
- strArr의 원소들은 알파벳 소문자로 이루어진 문자열입니다.
풀이
class Solution {
public int solution(String[] strArr) {
int answer = 0;
int[] counts = new int[31];
for(int i=0; i<strArr.length; i++){
counts[strArr[i].length()] += 1;
}
for(int i=1; i<=30; i++){
answer = Math.max(answer, counts[i]);
}
return answer;
}
}
다른 풀이
import java.util.*;
import java.util.stream.Collectors;
class Solution {
public int solution(String[] strArr) {
return Arrays.stream(strArr).collect(Collectors.groupingBy(String::length)).values().stream().max(Comparator.comparingInt(List::size)).orElse(Collections.emptyList()).size();
}
}
gourpingBy()
Collectors의 groupingBy()는 요쇼들을 그룹핑하여 Map객체를 리턴한다.
orElse 와 orElseGet
1. orElse
public T orElse(T other) {
return value != null ? value : other;
}
List<String> list = Arrays.asList("1","2","3");
String str = list.stream().filter(p-> p.equals("3")).findAny().orElse("NotNull");
orElse 는 값이 null 이 아닐 경우 해당 값을 반환하고, null일경우Type T를 그대로 반환한다.
2. orElseGet
public T orElseGet(Supplier<? extends T> other) {
return value != null ? value : other.get();
}
String str = list.stream().filter(p-> p.equals("3")).findAny().orElseGet(()->"NotNull");
Optional의 값이 null이 아닐 경우 해당 값을 반환하고, null일경우 Supplier Generice로 넘겨받았을 때의 값을 리턴한다.
둘 다 기능은 비슷하지만 인자 메소드의 실행 타이밍이 달라진다.
- orElse는 값을 인수로 받기때문에, 인수가 메소드일 경우 null이 아니더라도 메소드가 실행된다.
- orElseGet은 인수로 전달된 Supplier 메소드의 경우 Optional의 값이 null일 경우만 실행된다.
https://school.programmers.co.kr/learn/courses/30/lessons/181855
https://gem1n1.tistory.com/159
https://erjuer.tistory.com/102
'Algorithm > Programers - Java' 카테고리의 다른 글
[프로그래머스(Java)] 문자열 나누기 (0) | 2023.08.12 |
---|---|
[프로그래머스(Java)] 2의 영역 / rangeClosed (0) | 2023.08.12 |
[프로그래머스(Java)] 푸드 파이트 대회 (0) | 2023.08.12 |
[프로그래머스(Java)] 명예의 전당 (1) / 우선순위 큐 PriorityQueue (0) | 2023.08.05 |
[프로그래머스(Java)] 과일 장수 / Arrays.sort() (0) | 2023.08.05 |