알고리즘
Programmers - 숫자 n의 각 자리수로 분열 가능한 횟수 구하기
준준영
2019. 12. 14. 21:29
숫자 n의 각 자리수로 분열 가능한 횟수 구하기
어떤 숫자 n을 각 자리의 숫자로 나누었을 때, 나누어떨어지면 그 숫자로 분열 가능하다고 합니다.
예를 들어 2232이라는 숫자는 2와 3 두 개의 숫자로 구성되어 있습니다. 또한, 2232는 2로도 나누어떨어지고, 3으로도 나누어 떨어집니다. 따라서 분열 가능한 횟수는 2입니다.
2232의 예에서와같이 2가 여러 번 나오더라도 분열 가능한 횟수를 셀 때는 2 한 번, 3 한 번으로 세며 중복해서 나오는 숫자 2는 고려하지 않습니다.
숫자 n이 매개변수로 주어질 때, n이 분열 가능한 횟수를 return 하도록 solution 함수를 완성하세요.
[※ 숫자는 0으로 나눌 수 없음을 유의하세요.]
제한사항
- n은 1015 이하의 자연수입니다.
입출력 예
입출력 예 설명
입출력 예 #1
문제의 예제와 같습니다.
입출력 예 #2
1234의 경우 다음과 같습니다.
- 1234는 1로 나누어떨어짐
- 1234는 2로 나누어떨어짐
- 1234는 3으로 나누어떨어지지 않음
- 1234는 4로 나누어떨어지지 않음
따라서 분열 가능한 횟수는 2이므로 2를 return 합니다.
import java.util.HashSet;
public class FindDivisibleNumber {
public int solution(long n) {
int answer = 0;
// 각 자리수에 해당 하는 값을 중복없이 저장하기 위한 HashSet 객체 생성
HashSet<Integer> hashSet = new HashSet<>();
String number = String.valueOf(n);
getDistinctNumber(n, hashSet, number);
hashSet.forEach(s -> System.out.println(s));
for (int val : hashSet){
if(n % val == 0) {
answer++;
}
}
return answer;
}
private void getDistinctNumber(long n, HashSet<Integer> hashSet, String number) {
for (int i = 0; i < number.length(); i++) {
int remain = 0;
// 각 자리수 추출
remain = (int) n % 10;
hashSet.add((int) remain);
n = n / 10;
}
}
public static void main(String[] args) {
FindDivisibleNumber divideN = new FindDivisibleNumber();
int n = 2322;
System.out.println(divideN.solution(n));
}
}
각각의 자리수를 중복없이 추출하기 위해 List 타입을 사용하여 contains() 메소드를 이용하여 중복이 되지 않는 각 자리수를 추출하려 했지만,
HashSet 객체를 이용하는것이 더 적절하다고 판단하여 사용하였습니다.