Java의 Stream 공부를 하다, 풀어볼 수 있는 연습문제가 있으면 좋겠다는 생각을 해서 포스팅 해봤습니다.
문제 난이도는 기본, 심화로 나눴습니다.
기본 문제는 모던 자바 인 액션 이라는 책의 Chapter5를 약간 변형해서 첨부하였고,
심화 문제는 알고리즘 문제를 풀면서 자주 사용할 것 같은 기법에 대해 직접 문제를 만들어 봤습니다.
혹시라도 더 효율적인 코드가 있거나 문제에 오류가 있으면 많은 피드백 부탁드립니다.
2022.01.12 - [자바 & 스프링] - Stream 연습 문제 1 - 기본
준비 코드
public class Advance {
public static void main(String[] args) {
String[] alphabetList = new String[]{
"ABCAAC",
"AABBCC",
"CCCCCC",
"CCBBAA",
"CCCAAA"
};
// 1. alphabetList 각각의 스트링에 있는 고유한 알파벳 개수가 들어있는
// List<Long> 형태의 배열을 반환하시오.
// 2. alphabetList 각각의 스트링에 대해 알파벳을 키로,
// 키에 해당하는 알파벳 개수를 값으로 하는
// List<Map<String, Long>> 형태의 배열을 반환하시오.
// 3. alphabetList 각각의 스트링에 대해 알파벳을 키로,
// 키에 해당하는 알파벳의 index 배열을 값으로 하는
// List<Map<String, List<Integer>>> 형태의 배열을 반환하시오.
}
}
기대값
- [3, 3, 1, 3, 2]
- [{A=3, B=1, C=2}, {A=2, B=2, C=2}, {C=6}, {A=2, B=2, C=2}, {A=3, C=3}]
- [{A=[0, 3, 4], B=[1], C=[2, 5]}, {A=[0, 1], B=[2, 3], C=[4, 5]},
{C=[0, 1, 2, 3, 4, 5]}, {A=[4, 5], B=[2, 3], C=[0, 1]}, {A=[3, 4, 5], C=[0, 1, 2]}]
정답
1. alphabetList 각각의 스트링에 있는 고유한 알파벳 개수가 들어있는 배열을 반환하시오.
List<Long> answer1 = Arrays.stream(alphabetList)
.map(s -> Arrays.stream(s.split(""))
.distinct()
.count())
.collect(Collectors.toList());
System.out.println(answer1);
2. alphabetList 각각의 스트링에 대해 알파벳을 키로, 키에 해당하는 알파벳 개수를 값으로 하는
List<Map<String, Long>> 형태의 배열을 반환하시오.
List<Map<String, Long>> answer2 = Arrays.stream(alphabetList)
.map(s -> Arrays.stream(s.split(""))
.collect(Collectors.groupingBy(Function.identity(), Collectors.counting()))
)
.collect(Collectors.toList());
System.out.println(answer2);
3. alphabetList 각각의 스트링에 대해 알파벳을 키로, 키에 해당하는 알파벳의 index 배열을 값으로 하는
List<Map<String, List<Integer>>> 형태의 배열을 반환하시오.
List<Map<String, List<Integer>>> answer3 = Arrays.stream(alphabetList)
.map(s -> s.split(""))
.map(s -> IntStream.range(0, s.length)
.boxed()
.collect(Collectors.groupingBy(i -> s[i])))
.collect(Collectors.toList());
System.out.println(answer3);
'자바 & 스프링' 카테고리의 다른 글
Stream 연습 문제 1 - 기본 (0) | 2022.01.12 |
---|---|
string관련 클래스 성능 비교 (0) | 2022.01.06 |
string concatenation compile optimization (0) | 2022.01.05 |
ThreadLocal의 활용 - 트랜잭션 동기화 (0) | 2021.12.22 |
ThreadLocal의 정의와 사용법 (0) | 2021.12.20 |