본문 바로가기

Server Programming/Spring Boot Backend Programming

[Stream] 활용 예제

반응형
package algo1;

import java.util.Arrays;
import java.util.stream.IntStream;

public class OneWeek03_Stream {
	//효율성 테스트
	//리팩토링을 거쳐 간결화
	//#1 스트림 이용
	public static void main(String[] args) {
		int[] budgets= {120,110,140,150};
		int M =485;
		
		System.out.println(solution(budgets, M));
	}
	static int solution(int[] budgets, int M) {
		
		//최솟값, 최댓값을 스트림으로
		int min=IntStream.of(budgets).min().orElse(0);
		int max=IntStream.of(budgets).max().orElse(0);
		//int배열을 스트림에 넣고, 그중 max값을 찾는데, 없으면 0 -> Optional(Int)
		for(int b:budgets) {
			if(b>max)
				max=b;
		}
		
		int answer=0;
		//최댓값과 최솟값이 같아질 때 까지 반복
		while(min<=max) {
			//스트림 메서드 안에서 사용하는 변수는 가변변수이면 안된다. -> final
			final int mid=(min+max)/2;
			//중간값을 예산의 상한액으로 설정해서 구한다.
			

			
			//총합을 스트림으로
			int sum=IntStream.of(budgets)
			.map(b-> Math.min(b, mid))
			//mid값보다 클경우 mid값으로 -> 즉 더 작은 값을 선택
			.sum();
			
			for(int b: budgets) {
				if(b>mid) {
					//상한값보다 클경우 상한값을 더한다.
					sum+=mid;
				}
				else sum+=b;
			}
			if(sum<=M) {
				//총합이 국가총예산보다 작으면, 최솟값을 이분탐색을 통해 증가시킨다.
				min=mid+1;
				
				//총합이 국가총예산보다 작지만, 그중 가장 클 때
				answer=mid;
			}
			else {
				//총합이 국가총예산보다 크면, 최댓값을 이분탐색을 통해 감소시킨다.
				max=mid-1;
			}
				
		}
		
		return answer;			
	}
}

 

 

 

package algo1;

import java.util.stream.*;

public class OneWeek02_Stream {
	//효율성 테스트
	//-> 정확성 테스트에서 시간초과 발생
	//: 루프에서 무한루프가 돌 경우, 제한시간보다 오래걸릴경우
	
	// 버블 소트를 사용했기때문에 느리다?
	//-> 라이브러리 사용하자
	public static void main(String[] args) {
		int[] numbers= {3, 30, 34, 5, 9};
		System.out.println(solution(numbers));
	}
	static String solution(int[] numbers) {
		//숫자 -> 문자 -> 내림차순정렬 -> 조합
		//1. 문자배열로
		//IntStream.of(numbers).mapToObj(n->String.valueOf(n));
		//문자배열로 변환 후 소트후 합치기
	String answer=
		IntStream.of(numbers).mapToObj(String::valueOf)
		.sorted((s1,s2)->(s2+s1).compareTo(s1+s2))
		.collect(Collectors.joining());
		 
		 //#3. 문자열 시작으로 변경
		//맨 앞 숫자가 0이면 0을 리턴
		 if(answer.startsWith("0")) return "0";
		 
		 return answer;
	}

}

 

 

import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.stream.Collectors;

class Solution {
    public int[] solution(String[] id_list, String[] report, int k) {
        List<String> list = Arrays.stream(report).distinct().collect(Collectors.toList());
        HashMap<String, Integer> count = new HashMap<>();
        for (String s : list) {
            String target = s.split(" ")[1];
            count.put(target, count.getOrDefault(target, 0) + 1);
        }

        return Arrays.stream(id_list).map(_user -> {
            final String user = _user;
            List<String> reportList = list.stream().filter(s -> s.startsWith(user + " ")).collect(Collectors.toList());
            return reportList.stream().filter(s -> count.getOrDefault(s.split(" ")[1], 0) >= k).count();
        }).mapToInt(Long::intValue).toArray();
    }
}

 

 

import java.util.*;

class Solution {
    public int solution(String skill, String[] skill_trees) {
   		return (int) Arrays.stream(skill_trees)
        .map(s -> s.replaceALL("[^"+skill+"]",""))
        .filter(s -> skill.startsWith(s))
        .count();
    }
}

 

 

import java.util.*;

class Solution {
    public int[] solution(long n) {
        List<Integer> list = new LinkedList<>();
        
        while(n > 0){
            list.add((int)(n % 10));
            n = n / 10;
        }
        return list.stream().mapToInt(Integer::intValue).toArray();
    }
}

 

 

      List<List<String>> bookedList = 
      Arrays.stream(booked).map(Arrays::asList).collect(Collectors.toList());
      List<List<String>> unbookedList = 
      Arrays.stream(unbooked).map(Arrays::asList).collect(Collectors.toList());
반응형