반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 시스템설계면접팁
- Git commit 합치기
- react-ga
- 리팩터링2판테스트
- 시스템설계방법
- 시스템설계면접
- 가상면접2장
- 테스트코드책
- cypressBDD
- FirebaseAnalytics
- 리팩토링2판4장
- git commit 협업
- file not found Error
- 헤드퍼스트전략패턴
- formik react-query submitting not working
- 디자인패턴
- 시스템설계
- 전략패턴
- formik submitting not working
- 시스템설계면접예시
- s3이미지다운로드됨
- git squash
- awss3
- gitsquash
- git commit merge
- 가상면접으로대규모시스템
- react
- 리액트구글애널리틱스
- 가상면접3장
- cypress React
Archives
- Today
- Total
mingg IT
[JAVA] 프로그래머스 소수 찾기 본문
programmers.co.kr/learn/courses/30/lessons/42839
우선 숫자를 잘라서 모든 경우의 수로 순열을 만들어야 한다.
또한 순열을 사용할 때 뽑을 숫자의 갯수를 하나씩 증가시켜 주어야한다.
순열을 어캐 구현해야할지 막막해서 블로그를 많이 참고했다.
또한 01, 1은 모두 같은 경우기 때문에 맨 앞 자리가 0인 경우는 제외하고 풀어주어야한다.
나는 뽑는 갯수에 따라 answerList에 모두 넣고, 작업이 끝난 이후
중복제거 -> 소수 판별
이 순서로 해줌.
근데 다른 사람들 코드를 살펴보니 answerList에 넣기전에 중복제거 & 소수 판별하는 경우도 있더라.
순열이나 조합을 짜는걸 공부를 해야할듯.
import java.util.*;
public class Permutation {
static LinkedList<String>strList = new LinkedList<>();
static LinkedList<String> resultList = new LinkedList<>();
static LinkedList<String> answerList = new LinkedList<>();
public static void permutation( LinkedList<String> arr, LinkedList<String> result, int n, int r) {
if(r == 0) {
String tempAns = "";
//01, 1 은 모두 1로 간주하기 때문에 앞자리가 1은 제외 시켜야함
if(!result.get(0).equals("0")) {
for(int i = 0; i < result.size(); i++) {
tempAns = tempAns + result.get(i);
}
answerList.push(tempAns);
}
return;
}
for(int i = 0 ; i < n; i++) {
result.add(arr.remove(i).toString());
permutation(arr, result, n-1, r-1);
arr.add(i, result.remove(result.size() -1));
}
}
public static int solution(String numbers) {
int answer = 0;
//strList에 numbers를 넣어줌
for(int i = 0; i < numbers.length(); i++) {
strList.add(Character.toString(numbers.charAt(i)));
}
for(int i = 0; i < numbers.length(); i++) {
permutation(strList, resultList, strList.size(), i + 1);
}
//중복 제거를 위해 List -> Set -> List로 변환함
HashSet <String> set = new HashSet<>(answerList);
ArrayList <String> realanswer = new ArrayList<String>(set);
for(int i = 0; i< realanswer.size(); i++) {
boolean isPrime = false;
int num = Integer.parseInt(realanswer.get(i));
int sqrt = (int) Math.sqrt(num);
if(num == 1) {
isPrime = false;
}
else if(num == 2) isPrime = true;
else {
isPrime = true;
for(int j = 2; j <= sqrt; j++) {
if(num % j == 0) {
isPrime = false;
break;
}
}
}
if(isPrime) answer++;
}
return answer;
}
public static void main(String [] args){
int tet = solution("011");
System.out.println(tet);
}
}
'코딩테스트' 카테고리의 다른 글
[코딩테스트] 정리 (0) | 2021.06.22 |
---|---|
[JAVA] 프로그래머스 네트워크 (0) | 2021.04.24 |
[JAVA] 프로그래머스 문자열 압축 (0) | 2021.04.17 |
[JAVA] 프로그래머스 스킬 트리 (0) | 2021.04.17 |
[JAVA] 프로그래머스 주식 가격 (0) | 2021.04.13 |
Comments