https://school.programmers.co.kr/learn/courses/30/lessons/181914
해당 문제를 람다식 형식과 스트림 방식을 통해 구현해보았다.
이번에 자바의정석을 통해 람다와 스트림을 처음 배워봤는데, 한번에 이해될거라 생각하지 못했지만, 완벽히 이해하지 못해서 공부해보고자 프로그래머스에서 가장 쉬운 난이도인 lv0문제를 대상으로 풀어봤다.
람다식으로 풀었을 때
public int solution(String number) {
Function<String, Integer> counter = string -> {
int count = 0;
for (int i = 0; i < number.length(); i++) {
count += number.charAt(i) - '0';
}
return count % 9;
};
return counter.apply(number);
}
스트림으로 풀 때의 다양한 형식
public int solution2(String number) {
//mapToInt는 10만의 제한때문에 할 수 없음
return IntStream.range(0, number.toCharArray().length)
.mapToObj(i -> Character.getNumericValue(number.charAt(i)))
.reduce(0, Integer::sum) % 9;
number.chars()
.map(Character::getNumericValue)
.reduce(0, Integer::sum);
return sum % 9;
return number.chars()
.map(ch -> Character.getNumericValue(ch))
.reduce(0, (x, y) -> x + y) % 9;
return number.chars()
.map(Character::getNumericValue)
.reduce(0,(x, y) -> x + y) % 9;
}
해당 문제는 number라는 String형태로 길이가 10만까지 주어지기에 int형이나 long형태를 사용하지 못하기때문에, mapToInt, mapToLong을 사용하지 못했다
그래서 char배열을 활용해야한다고 생각까지만 하고 해결하지 못하고 gpt한테 물어봐서 해결했다
알고 보니 String에는 chars라는 스트림을 지원해서 해당 스트림을 활용하면 풀 수 있는 문제였다
한동안은 계속 헤맬듯…
'공부 > 프로그래머스' 카테고리의 다른 글
프로그래머스 131123 즐겨찾기가 가장 많은 식당 정보 출력하기 (0) | 2024.03.03 |
---|---|
공배수(lv0) - with Stream (0) | 2023.09.26 |
배열의 평균값(lv0) - with Stream (0) | 2023.09.19 |