# Ruby 1.8에서테스트

# 유명해진지 조금 된 셀프넘버 문제

# 1 이상이고 5000 보다 작은 모든 셀프 넘버들의 합을 구하라


def
d(n)

  ret = n

  while n > 0
    ret += (n % 10)
    n /= 10
  end

  return ret

end

# i가 어떤수의 generator인가를 계산을해가지구
# i가 generate를 하는 수인 generated는 self number가 아님
# 범위안에 있는수면은 tab에 false 넣음
# bound.times 만을 d에 호출하면 되는 이유는
# generated 보다 큰 generator는 없기 때문

def sum_of_self_number(bound)

  tab = Array.new(bound, true)

  bound.times do |i|
    generated = d(i)
    (tab[generated] = false) if (generated < bound)
  end

  sum = 0
  bound.times do |i| ((sum += i) if tab[i]) end

  return sum

end

require 'test/unit'

class TestSumOfSelfNum < Test::Unit::TestCase

  def test_method
    assert_equal(1227365, sum_of_self_number(5000))
  end

end
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by sloth_chord
TAG ,