728x90
코딩 테스트 풀이 체크리스트 |
|
2시간 내에 풀었는가? | O |
본인의 실력으로 풀었는가? | O |
코딩테스트 연습 - 소수 찾기
한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다. 각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이
programmers.co.kr
import java.util.*;
class Solution {
ArrayList<Integer> nList; //추가한 숫자인지 확인용
boolean[] check; //다녀간 숫자인지 확인용
int answer; //리턴값 모을 용도
public int solution(String numbers) {
nList = new ArrayList<>();
answer = 0;
String[] temp = numbers.split("");
int[] nums = new int[temp.length];
check = new boolean[temp.length];
//split으로 나눈 numbers를 int로 변경
for (int i = 0; i < temp.length; i++) {
nums[i] = Integer.parseInt(temp[i]);
}
func(nums, 0);
return answer;
}
public void func(int[] nums, int num) {
//무조건 체크하기
if (checkNum(num)) {
answer++;
nList.add(num);
}
//숫자 만들기
for (int i = 0; i < nums.length; i++) {
if (check[i]) continue;
check[i] = true;
int temp = num * 10 + nums[i];
func(nums, temp);
check[i] = false;
}
}
//소수인지 체크하는 함수
public boolean checkNum(int num) {
if (num == 0 || num == 1) return false;
if (nList.indexOf(num) != -1) return false;
for (int i = 2; i <= Math.sqrt(num); i++) {
if (num % i == 0) return false;
}
return true;
}
}
테스트 1 〉 | 통과 (0.22ms, 78.2MB) |
테스트 2 〉 | 통과 (3.36ms, 72.3MB) |
테스트 3 〉 | 통과 (0.13ms, 73.2MB) |
테스트 4 〉 | 통과 (1.18ms, 72.6MB) |
테스트 5 〉 | 통과 (2.58ms, 77.4MB) |
테스트 6 〉 | 통과 (0.16ms, 78.5MB) |
테스트 7 〉 | 통과 (0.34ms, 75.4MB) |
테스트 8 〉 | 통과 (3.42ms, 86MB) |
테스트 9 〉 | 통과 (0.23ms, 78.3MB) |
테스트 10 〉 | 통과 (6.38ms, 74.1MB) |
테스트 11 〉 | 통과 (1.26ms, 72.9MB) |
테스트 12 〉 | 통과 (0.80ms, 69MB) |
728x90
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[Java] 프로그래머스 - 정수 삼각형 (3단계) (0) | 2022.05.26 |
---|---|
[Java] 프로그래머스 - 조이스틱 (2단계) (0) | 2022.05.25 |
[Java] 프로그래머스 - 가장 큰 수 (2단계) (0) | 2022.05.23 |
[Java] 프로그래머스 - 디스크 컨트롤러 (3단계) (0) | 2022.05.17 |
[Java] 프로그래머스 - 프린터 (2단계) (0) | 2022.05.12 |