문제
https://programmers.co.kr/learn/courses/30/lessons/42839
코드
- 순열을 이용한 완전탐색으로 해결
1 | public int solution(String numbers) { |
흐름
- [1,2,3] 배열일 경우 3 자리 수 까지 나타날 수 있으므로, numbers의 길이 만큼 반복하면서 순열을 만듬
- perm() 메서드를 재귀로 돌면서 깊이 만큼 index를 스위칭하면서 순열을 만듬
- ex) [1,2,3] 인 경우, 0번째와 0번째를 스왑하여 123이 되고 그 이후엔 0번째와 1번째를 스왑해서 213, 그 이후엔 0과 2를 스왑해서 321 … 이런 식으로 진행된다
- 돌다가 깊이랑 이번에 만들 숫자의 길이가 같으면 중복되지 않게 Set에 저장하는데 1 이하인 경우엔 소수가 아니므로 저장하지 않음
- 다시 swap() 해서 배열 index를 원상복귀 시킴
- 반복해서 모든 순열을 만든 후 해당 Set에 저장된 수들이 소수 인지 판별해서 소수면 카운트 증가시킴
- 끝
결과
번호 | 속도 |
---|---|
테스트 1 | 통과 (1.06ms, 50.3MB) |
테스트 2 | 통과 (9.99ms, 53MB) |
테스트 3 | 통과 (0.83ms, 52.1MB) |
테스트 4 | 통과 (7.08ms, 52.6MB) |
테스트 5 | 통과 (23.43ms, 56MB) |
테스트 6 | 통과 (0.91ms, 52.6MB) |
테스트 7 | 통과 (1.13ms, 51.9MB) |
테스트 8 | 통과 (18.16ms, 55.9MB) |
테스트 9 | 통과 (0.96ms, 49.9MB) |
테스트 10 | 통과 (10.37ms, 52.9MB) |
테스트 11 | 통과 (2.51ms, 51.5MB) |
테스트 12 | 통과 (2.16ms, 52MB) |
테스트 케이스
1 | assertEquals(3, test.solution("17")); |