CodeWars 스물 세 번째 문제
Updated:
Integers: Recreation One
public static String listSquared(long m, long n) {
List<String> listSquared = new ArrayList<String>();
for(long i = m ; i <= n ; i++) {
findListSquared(i, listSquared);
}
return "[" + String.join(", ", listSquared) + "]";
}
public static void findListSquared(long m, List<String> listSquared) {
long sumOfDivisorsSquared = sumOfDivisorsSquared(m);
if(sumOfDivisorsSquared == longTypeSqrtMultiple(sumOfDivisorsSquared)) {
listSquared.add("[" + m + ", " + (long)sumOfDivisorsSquared + "]");
}
}
public static long longTypeSqrtMultiple(long sumOfDivisorsSquared) {
return longTypeSqrt(sumOfDivisorsSquared) * longTypeSqrt(sumOfDivisorsSquared);
}
public static long longTypeSqrt(long sumOfDivisorsSquared) {
return (long)Math.sqrt(sumOfDivisorsSquared);
}
public static long sumOfDivisorsSquared(long m) {
long sum = 0;
for(long i = 1 ; i <= m; i++) {
if(m%i == 0) {
sum += Math.pow(i, 2);
}
}
return sum;
}
*심혈을 기울여 코드를 작성했다. TDD 테스트코드를 짜면서 실행하니까 확실히 에러 잡는데 편했다. 완벽하진 않지만 TDD작성 -> 코드 작성 -> 테스트 통과 -> 리펙토링 과정을 나름 지켜가며 짜보도록 노력하고 있다. 잘하고 있다 화이팅하자. 스벌
*Math.sqrt 의 경우 double을 반환한다. 따라서 long 타입으로 형 변환을 해줘야 한다.
*이전에 공부한 String.join으로 코드가 간결해졌다. 좋다.