728x90
반응형
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());
728x90
반응형
'Server Programming > Spring Boot Backend Programming' 카테고리의 다른 글
[Spring 부트 - 방명록 미니 프로젝트] 2-2. 서비스, DTO, 컨트롤러 작성 (1) (0) | 2022.10.02 |
---|---|
[Spring 부트 - 방명록 미니 프로젝트] 2-1. 프로젝트 생성과 Querydsl (0) | 2022.10.02 |
[Spring 부트] 1. 타임리프 활용 (0) | 2022.10.02 |
[Spring 부트] 프로젝트로 공부하기 (0) | 2022.10.02 |
application.properties (0) | 2022.10.01 |