U E D R , A S I H C RSS

최소정수�합/임��

motivation

몇명� 제외하곤 다들 루프를 ㅤㅆㅓㅅ�것 같아 다른 방법� ��해보았다. 내 코드를 다 짜고보니 현태와 보창�가 가우스� 방법� �서 summation � 구한걸 볼 수 있었다. 고등학� 시절� 떠올린 모양�었다. 난 조금 � 시간� 거슬러 올�가 중학� 시절로 올�갔다. 문제�서 요구하는게, ~~��� 최소 정수(사실 � 문제�서는 범위가 정수가 아닌 �연수로 제한�어 있다고 보는게 � 정확하다)를 구하���, �를 보고 불현듯 부등�� ��나 바로 �용하였다. 처��는 DivideAndConquer 를 ��해 보기� 했는� � 시�치가 않았다가 발�� 전환� �룬게 �움� �었다.

시간복잡�는 O(1) �다. 호호호 -_-

코 드

~cpp 
import unittest
import math

def summation(num):
	return num*(num+1)/2

def eq_2(a,b,c):
	_2a = 2*a
	_b_4ac = math.sqrt(b*b-4*a*c)

	hae1 = (-b + _b_4ac) / _2a
	hae2 = (-b - _b_4ac) / _2a

	return hae1, hae2

def minint(num):
	hae1, hae2 = eq_2(1.0, 1.0, (float)(-2*num))
	hae = (int)(max(hae1, hae2))

	sum = summation(hae)
	
	if( sum < num ):
		return hae+1, summation(hae+1)
	else:
		return hae, sum


class TestMinInt(unittest.TestCase):
	def testSummation(self):
		self.assertEquals(55, summation(10))
		self.assertEquals(10, summation(4))
		self.assertEquals(5050, summation(100))
		self.assertEquals(500500, summation(1000))
	

if __name__=='__main__':
	#unittest.main(argv=('','-v'))
	print minint(3000)


나한테 할 �

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:31:17
Processing time 0.0036 sec