티스토리 뷰
이문제는 완전 탐색 문제로 주어진 숫자로 만들 수 있는 모든 문자 중에 소수를 찾는 문제였다. 숫자로 순열을 만드는 코드를 작성할 수 있다면 쉽게 풀 수 있었던 문제인 거 같다. (물론 나는 순열 코드를 고치고 결국 참고하고...ㅎ) 공부할게 역시 엄청나게 많구나를 느낀 문제였다 ㅎ...
import java.util.HashSet;
import java.util.stream.Stream;
class Solution {
//중복된 숫자가 담기지 않게 구하는 숫자를 set에 저장
static HashSet<Integer> ansSet = new HashSet<>();
public int solution(String numbers) {
//String을 int배열로 넣는 코드
int[] intNumbers = Stream.of(numbers.split("")).mapToInt(Integer::parseInt).toArray();
for (int i = 1; i <= numbers.length(); i++) {
//1개부터 n개의 숫자를 선택하여 순열생성
permutation(intNumbers,0,numbers.length(),i);
}
return ansSet.size();
}
static void permutation(int[] arr, int depth, int n, int r) {
if (depth == r) {
String checkNum = "";
for (int i = 0; i < r; i++){
checkNum = checkNum+arr[i];
}
if(isPrime(Integer.parseInt(checkNum))){
ansSet.add(Integer.parseInt(checkNum));
}
return ;
}
for (int i=depth; i<n; i++) {
swap(arr, depth, i);
permutation(arr, depth + 1, n, r);
swap(arr, depth, i);
}
}
static void swap(int[] arr, int depth, int i) {
int temp = arr[depth];
arr[depth] = arr[i];
arr[i] = temp;
}
static boolean isPrime(int num) {
if (num == 1 || num == 0)
return false;
for (int i = 2; i <= Math.sqrt(num); i++) {
if (num != 2 && num % i == 0) {
return false;
}
}
return true;
}
}
보다 보니 이런 swap을 이용한 코드가 아닌 subString을 이용한 순열 생성 코드도 있길래 가져와보았다!
public void permutation(String prefix, String str, HashSet<Integer> set) {
int n = str.length();
if(!prefix.equals("")) set.add(Integer.valueOf(prefix));
for (int i = 0; i < n; i++)
permutation(prefix + str.charAt(i), str.substring(0, i) + str.substring(i+1, n), set);
}
신기하고 재미있으며 어렵기도 한 코드의 세계,,,,,ㅎ
'CS공부 > 알고리즘&문제풀이' 카테고리의 다른 글
[프로그래머스]스택/큐:프린터(java) (0) | 2020.07.14 |
---|---|
[프로그래머스]정렬:가장 큰 수(java) (0) | 2020.07.13 |
[프로그래머스]힙(Heap):이중우선순위큐(java) (0) | 2020.07.05 |
[프로그래머스]힙(Heap):디스크 컨트롤러(java) (0) | 2020.06.30 |
[프로그래머스]힙(Heap):라면공장(java) (0) | 2020.06.28 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 삼성 sw역량 테스트
- 최소 스패닝 트리
- MST
- SWEA
- websocket
- 분리 집합
- 삼성 sw역량테스트
- 운영체제
- 자바
- 백준
- Spring
- 코딩테스트
- dfs
- Stomp
- BFS
- Baekjoon
- 완전탐색
- 정렬
- git
- programers
- Heap
- DP
- 채팅
- Oracle
- 프로그래머스
- 알고리즘
- JavaScript
- java
- sockjs
- OS
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함