U E D R , A S I H C RSS

The Trip/Leonardong

각 여행자가 1센트까지 쪼개서 나워 가진다고 생각한 코드입니다.

~cpp 
class Exchanger:
    def getListOfBiggerThan(self, aMean, aList):
        resultList = []
        for each in aList:
            if each > aMean:
                resultList.append(each)
        return resultList
    def getMeanOfList(self, aList):
        return sum(aList, 0) / len(aList)
    def offerAShareOfMoney(self, aExpenses):
        expensesBiggerThanMean = self.getListOfBiggerThan(
                                    self.getMeanOfList(aExpenses),
                                    aExpenses)
        result = 0.0
        for each in expensesBiggerThanMean:
            result = result + abs( each - self.getMeanOfList(aExpenses) )
        return result
#########################################################################           
import unittest

class TheTripTestCase(unittest.TestCase):
    def setUp(self):
        self.ex = Exchanger()
    def testGetListOfBiggerThan(self):
        expenses = [0.0, 1.0, 2.0, 3.0]
        mean = self.ex.getMeanOfList(expenses) # mean is 1.5
        expected = expenses[2:]
        self.assertEquals( expected,
                           self.ex.getListOfBiggerThan( mean, expenses ))
    def testOfferAShareOfMoney(self):
        self.assertEquals( 10.0,
                           self.ex.offerAShareOfMoney( [10.0, 20.0, 30.0] ))
        self.assertEquals( 11.99,
                   self.ex.offerAShareOfMoney( [15.0, 15.01, 3.0, 3.01] ))

#########################################################################
if __name__ == '__main__': 
    unittest.main()   

Thread

일단 문제를 이해하는데 시간이 20분 정도 걸렸다. 문제 해결책을 찾아보던 중 평균보다 많이 가진 사람들이 돈을 나누어 주면 된다는 사실을 깨닫기까지 14분 걸렸다. 코드로 만드는데는 41분이 걸렸는데, 알고리즘을 따라 무난히 작성하였다. 나머지 시간은 문법을 보거나 디버깅했다.

문제를 풀기 전에 샘플 입력부터 보는 경향이 있다. 문제를 이해 못했으므로 샘플 입력을 보다가 결국 다시 문제를 보느라 시간이 지체된다. 따라서 문제를 다 이해하고, 정의한 뒤 샘플 입력을 보아 정의가 맞는지 확인하는 순서로 문제를 풀어야겠다. 해결책은 문제를 정의한 다음에 떠올린다.

무엇이 잘못 되어도 테스트를 추가해본다는 점은 역시나 TDD가 매력적일 수 밖에 없는 요인이다. 이제는 손으로 테스트를 하려면 너무 귀찮고 시간낭비라고 생각한다. TDD 리듬을 조절해줄 파트너가 옆에 있다면 더욱 좋으련만. :) --Leonardong

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2009-05-27 07:09:19
Processing time 0.0132 sec