알고리즘/programmers
프로그래머스 레벨1 소수구하기 (JAVA)
dev-jo
2021. 7. 9. 02:36
퇴근 후 너무 피곤하지만
하루에 한 문제 정도는 풀어보기 위하여 오늘도 레벨 1부터 한 문제 씩 풀어본다..
오늘 푼 문제는
https://programmers.co.kr/learn/courses/30/lessons/12977
코딩테스트 연습 - 소수 만들기
주어진 숫자 중 3개의 수를 더했을 때 소수가 되는 경우의 개수를 구하려고 합니다. 숫자들이 들어있는 배열 nums가 매개변수로 주어질 때, nums에 있는 숫자들 중 서로 다른 3개를 골라 더했을 때
programmers.co.kr
프로그래머스 레벨1 소수 만들기 다
푼 모든 알고리즘 문제는 GitHub
깃허브에도 올려놓았다.
import java.util.ArrayList;
import java.util.List;
/**
* 소수 만들기
*/
public class Programmers12977 {
public static void main(String[] args) {
// System.out.println(solution(new int[]{1,2,3,4}));
System.out.println(solution(new int[]{1, 2, 7, 6, 4}));
}
public static int solution(int[] nums) {
List<Integer> list = new ArrayList<>();
for (int i = 0; i < nums.length; i++) {
for (int j = i + 1; j < nums.length; j++) {
for (int m = j + 1; m < nums.length; m++) {
list.add(nums[i] + nums[j] + nums[m]);
}
}
}
return (int) list.stream().filter(num -> {
boolean flag = true;
int sq = (int) Math.sqrt(num);
for (int i = 2; i <= sq; i++) {
if (num % i == 0) {
flag = false;
}
}
return flag;
}).count();
}
}
처음 for문에서 경우의수를 구해주고 list에 넣어준다.. ( 3중 for 문이라니.. 공부를 더해야겠다 )
그리고 바로 스트림을 써서 값을 구해줬다
return list.stream().filter(num ->)
값을 하나하나 꺼내 num에 넣어주고
제곱근으로 소수를 판별해주었다
filter 에서 return이 true 가 된다면 그 값은 list 안에 보존된다.
return false 가 된다면 그 값은 list에서 제거된다.
판별 후. count();
소수만 남은 list의 count를 return 시켜줬다.!
후기
1. 람다를 쓰면 역시 속도가 안 나온다.
2. 3중 for 문보다 더 좋은 방법이 있을 거 같은데 나중에 다시 풀어봐야겠다.