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으로 코드가 간결해졌다. 좋다.