comment
람다식, 스트림에 익숙해지기 위해
람다식, 스트림을 사용한 풀이방법 일부를 계속해서 추가할 예정입니다.
Filter()
filter(), chars(), count()
더보기
문제 간단 설명
주어진 문자열에서 p의 개수와 y의 개수가 일치하는지 확인하는 문제 (대소문자 구별 x)
boolean solution2(String s) {
s = s.toUpperCase();
return s.chars().filter( e -> 'P'== e).count() == s.chars().filter( e -> 'Y'== e).count();
}
해석
boolean solution2_(String s) {
s = s.toUpperCase();
IntStream chars = s.chars(); //String -> char -> IntStream
long countP = chars.filter(e -> 'P' == e).count(); //Intstream -> filter -> count
long countY = chars.filter(e -> 'Y' == e).count();
return countP == countY;
}
Map()
map(), chars()
더보기
문제 간단 정리
숫자를 거꾸로 출력하는 문제
public int[] solution2(long n){
return new StringBuilder().append(n).reverse().chars().map(Character::getNumericValue).toArray();
}
해석
public int[] solution2_(long n){
StringBuilder sb = new StringBuilder();
sb.append(n); //StringBuilder 생성
sb.reverse(); //StringBuilder.reverse()로 문자열 뒤집기
IntStream chars = sb.chars(); //문자열 -> intStream
IntStream intStream = chars.map(Character::getNumericValue); // map ch -> int
int[] intArr = intStream.toArray(); //intStream -> 배열
return intArr;
}
sorted(), mapToInt()
더보기
문제 간단 정리
arr의 원소 중 divisor로 나누어 떨어지는 수를 배열에 담아 정렬하여 반환.
반환 배열의 크기가 0이면, 배열에 -1 하나 담아서 반환
람다식, 스트림 사용
public int[] solution(int[] arr, int divisor) {
List<Integer> list = new ArrayList();
for(int i : arr){
if(i%divisor==0)list.add(i);
}
int[] answer = list.stream().sorted().mapToInt(Integer -> Integer).toArray();
if(answer.length == 0){
return new int[]{-1};
}
return answer;
}
해석
public int[] solution(int[] arr, int divisor) {
List<Integer> list = new ArrayList();
for(int i : arr){
if(i%divisor==0){
list.add(i);
}
}
Stream<Integer> stream = list.stream().sorted(); //list를 정렬된 stream으로 변환
IntStream intStream = stream.mapToInt(Integer -> Integer); //Integer->Integer로 매핑
int[] ints = intStream.toArray(); // 배열로 변환
if(ints.length == 0){
return new int[]{-1};
}
return ints;
}
IntStream, range(), map(), sum()
더보기
문제 간단 정리
public int solution(int[] a, int[] b) {
return IntStream.range(0, a.length).map(index -> a[index] * b[index]).sum();
}
해석
IntStream.range(0, n) : 0부터 n-1까지 증가하며 숫자 생성
map(index -> a [index]*b [index]) : 람다식으로 앞에서 받은 숫자를 a [index]*b [index]로 변환
sum() : 위에서 받은 a [index]*b [index]를 계속 더해줌
반응형
'자료구조_알고리즘 > 코딩테스트' 카테고리의 다른 글
[JAVA/String] 알고리즘 문제풀이 시 유용한 String 문자열 다루기 (0) | 2023.06.09 |
---|---|
[백준/JAVA] 5430번 AC / 데크, 자료구조 (0) | 2023.06.07 |
[백준/JAVA] 11866번 : 요세푸스문제 0 / Queue 자료구조 (0) | 2023.06.05 |
[백준/JAVA] 2805번 : 나무 자르기 (이분탐색) (0) | 2023.06.03 |
[백준/JAVA] 1966번 : 프린터 큐 (0) | 2023.05.19 |