TIL Java
내일배움캠프 20일차 TIL _ 5주 1일차
mad038
2024. 5. 13. 22:04
- 오늘 있었던 일
- 스프링 공부
- 알고리즘 공부
SPRIONG
- 스프링 정리
알고리즘 문제 풀기
● 과일 장수
더보기
● 과일 장수 //링크
import java.util.Arrays;
class Solution {
public int solution(int k, int m, int[] score) {
int box = score.length/m;
int answer = 0;
Arrays.sort(score);
for (int i = 0; i < box; i++) {
answer += score[score.length- (i + 1) * m] * m;
}
return answer;
}
}
- 첫 시도에 성공함
- 문제 지문에
- 사과는 상자 단위로만 판매하며, 남는 사과는 버립니다
- 그렇다면 박스단위로 자르고 그 첫 값에서 m만 곱하면 됄러나?
- 성공
- 문제 지문에
- 밑은 다른 사람의 풀이
-
import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.stream.Collectors; import java.util.stream.IntStream; class Solution { public int solution(int k, int m, int[] score) { if (score.length < m) { return 0; } int numSaleApple = m * (score.length / m); List<Integer> collect = Arrays.stream(score) .boxed() .sorted(Collections.reverseOrder()) .limit(numSaleApple) .collect(Collectors.toList()); return IntStream.range(0, collect.size()) .filter(i -> i % m == m - 1) .map(collect::get) .reduce(Integer::sum) .getAsInt() * m; } }
- 스트림 문으로 풀어도 생각보다 길다.
-
import java.util.*; class Solution { public int solution(int k, int m, int[] score) { int answer = 0; Arrays.sort(score); for(int i = score.length; i >= m; i -= m){ answer += score[i - m] * m; } return answer; } }
- 나와는 반대로 최대값부터 구했다.
● 소수 만들기
더보기
● 소수 만들기//링크
import java.util.ArrayList;
import java.util.List;
class Solution {
public int solution(int[] nums) {
List<Integer> list = new ArrayList<>();
for (int i = 0; i < nums.length - 2; i++) {
for (int j = i+1; j < nums.length -1 ; j++) {
for (int k = j+1; k < nums.length ; k++) {
int sum = nums[i] + nums[j] + nums[k];
list.add(sum);
}
}
}
int cont = 0;
for(int i : list){
int is = (int) Math.sqrt(i);
for (int j = 2; j <= is ; j++) {
if(i % j == 0){
cont++;
break;
}
}
}
int answer = list.size() - cont;
return answer;
}
}
- 3가지의 수를 중복없이 더해야 한다 = 전에 풀었던 삼총사
- 문제 지문에
- 소수가 되는 경우의 개수를 구하려고 합니다
- 소수를 구하려 하면 중간에 중복된다. 그렇다고 중간에 브레이크를 걸면 소수가 전부 선택돼지 않는다
- 브레이크를 이용해 소수를 구한다 X
- 반대로 소수가 아닌 값을 구해서 총 계수에서 뺀다. O
- 문제 지문에
- 성공함 밑은 다른 사람의 풀이
-
class Solution { public int solution(int[] nums) { int answer = 0; int sum =0; for(int i=0; i<nums.length-2; i++) { for(int j=i+1; j<nums.length-1; j++) { for(int k=j+1; k<nums.length; k++) { sum= nums[i]+nums[j]+nums[k]; for(int l=2; l<sum; l++) { if(sum%l==0) { break; } if(l==sum-1) { answer++; } } } } } return answer; } }
- 4중 반복문으로도 가능했구나
당일 회고
- 스프링.. 쉬우면서 어려워...