어떤 자연수 n이 있을 때, d(n)을 n의 각 자릿수 숫자들과 n 자신을 더한 숫자라고 정의하자.
예를 들어
d(91) = 9 + 1 + 91 = 101
이 때, n을 d(n)의 제네레이터(generator)라고 한다. 위의 예에서 91은 101의 제네레이터이다.
어떤 숫자들은 하나 이상의 제네레이터를 가지고 있는데, 101의 제네레이터는 91 뿐 아니라 100도 있다. 그런데 반대로, 제네레이터가 없는 숫자들도 있으며, 이런 숫자를 인도의 수학자 Kaprekar가 셀프 넘버(self-number)라 이름 붙였다. 예를 들어 1,3,5,7,9,20,31 은 셀프 넘버 들이다.
1 이상이고 5000 보다 작은 모든 셀프 넘버들의 합을 구하라.
[ 풀이: java ]
public static void main(String[] args)
{
calculateNumbersHasGenerator();
int sum = 0;
for (int i = 0; i < 11; i++)
if (!hasGenerator(i))
sum += i
System.out.println("합: "+sum);
}
private static boolean hasGenerator(int num)
{
return numbersHasGenerator.contains(num);
}
private static ArrayList<Integer> numbersHasGenerator
private static void calculateNumbersHasGenerator()
{
numbersHasGenerator = new ArrayList<Integer>();
for (int i = 0; i <= 10; i++)
{
String num = String.valueOf(i);
int no = 0;
for (int n = 0; n < num.length(); n++)
no += Integer.parseInt(num.substring(n, n + 1));
numbersHasGenerator.add(no + i);
}
}
[ 요약 ]
1. 각 숫자의 자릿수와 그 숫자 자신을 배열 형태로 넣는다.
2. 위 문제에서 말한 셀프넘버/제너레이터를 구분한다.
3. 셀프넘버의 모든 합을 구한다.
1. calculateNumbersHasGenerator() : 각 숫자의 자릿수와 자기자신을 배열(numbersHasGenerator)에 넣는다.
(사실 저는 2번을 구현하는 방법이 잘 떠오르지 않았고, 어려웠습니다.)
2. hasGenerator(int num) : 셀프넘버/제너레이터를 구분한다.
여기서 자바의 contains() 메서드를 사용했습니다.
contains() 메서드는 특정 문자가 포함됐는지 확인하는 메서드입니다.
특정 문자열이 포함됐다면 true를, 반대의 경우엔 false를 반환합니다.
따라서
제너레이터의 경우엔 ture를, 싱글넘버의 경우엔 false를 반환하게 됩니다.
0~10 까지의 숫자를 예로 들어보겠습니다.
숫자 | 제너레이터 = true / 싱글넘버 = false |
0 | true |
1 | false |
2 | true |
3 | false |
4 | true |
5 | false |
6 | true |
7 | false |
8 | true |
9 | false |
10 | true |
우리가 필요한건 false(싱글넘버)입니다.
그렇기 때문에 for문 안에
if 조건에 !hasGenerator(i)를 했습니다.
그러면 우리가 원하는 false(싱글넘버)를 반환해줄 것입니다.
3. sum += i : 싱글넘버의 모든 합을 구합니다.
자바에서 for문을 이용해 합을 구할 때 많이 사용하는 문법입니다.
sum += i의 뜻은 sum = sum + i입니다.
① for문을 통해서 숫자 0 ~ 5000까지 반복합니다.
② if문을 통해서 싱글넘버를 추출합니다.
③ sum += i로 싱글넘버의 합을 구합니다.
출처 : http://codingdojang.com/scode/365#answer-filter-area
'날이 좋지 않아서 > 코딩 테스트' 카테고리의 다른 글
[구글] 1부터 10,000까지 8이라는 숫자가 총 몇번 나오는가? (0) | 2019.07.21 |
---|---|
3,5의 배수의 총합을 구하라 (0) | 2019.07.06 |