https://programmers.co.kr/learn/courses/30/lessons/42839#qna
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
프로그래머스 소수찾기 문제를 풀었습니다.
테스트케이스 4번이 에러가 나서 정답은 아니지만 더 이상 이 문제를 풀기 싫기 때문에 포스팅하고 추후에 다시 한번 풀어보겠습니다.
이 문제를 처음 접하고는 문제의 풀이 순서를 아래와 같이 정하였습니다.
1. 나올 수 있는 모든 순열을 만들기
2. 순열에 대한 소수 판별을 적용
3. 11 == 011이므로 이와 같은 맨 앞의 0이 들어가는 숫자 처리
순열을 만드는 방법은 아래 출처에 있는 블로그 글을 참조했습니다.
순열을 바로 구현할 수 있는 것이 중요한데, 저의 경우 아직 많이 부족한 것 같습니다.
import java.util.LinkedList;
import static java.lang.Math.sqrt;
public class decimal {
static class Solution {
public int solution(String numbers) {
int answer = 0;
char[] numberArr = numbers.toCharArray();
int[] arr = new int[numberArr.length];
for(int i=0; i<arr.length; i++){
arr[i] = Integer.parseInt(String.valueOf(numberArr[i]));
}
LinkedList<String> permArr = new LinkedList();
int n = arr.length;
for(int i=1; i <= arr.length; i++){
permutation(arr, 0, n, i, permArr);
}
answer = permArr.size();
// System.out.println(answer);
return answer;
}
boolean searchDecimal(int number){
if( number == 1 || number == 0){
return false;
}
for(int i=2; i <= sqrt(number); i++){
if( number % i == 0) {
return false;
}
}
return true;
}
void permutation(int[] arr, int depth, int n, int k, LinkedList permArr){
if(depth == k){
String temp = "";
temp = print(arr,k);
if(searchDecimal(Integer.parseInt(temp))){
for(int i=0; i<temp.length(); i++){
if(temp.charAt(0) == '0'){
temp = temp.substring(1);
}
}
if(!permArr.contains(temp)){
permArr.add(temp);
System.out.println(temp);
}
}
return;
}
for(int i=depth; i<n; i++){
swap(arr, i, depth);
permutation(arr, depth+1, n, k, permArr);
swap(arr, i, depth);
}
return;
}
void swap(int[] arr, int i, int j){
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
String print(int[] arr, int k){
StringBuilder temp = new StringBuilder();
for(int i=0; i<k; i++){
temp.append((arr[i]));
}
return temp.toString();
}
}
}
출처 : https://gorakgarak.tistory.com/522
순열(Permutation) 알고리즘
1,2,3 와 같은 숫자들이이 있다. 이것을 중복하지 않고 순서를 끌어내는 방법을 생각해보자 1-2-3 1-3-2 2-1-3 2-3-1 3-1-2 3-2-1 여섯가지 방법이 존재한다. 이제 숫자 네개인 1,2,3,4를 한번 섞어본다. 1-2-3-4..
gorakgarak.tistory.com
'알고리즘' 카테고리의 다른 글
프로그래머스 - 숫자야구 (0) | 2020.04.04 |
---|---|
프로그래머스 - 카펫 (2) | 2020.04.04 |
프로그래머스 - 모의고사 (0) | 2020.04.04 |
프로그래머스 - 오픈채팅방 (1) | 2020.03.28 |
프로그래머스 - 캐시(성공) (0) | 2020.03.28 |