Toggle menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

ReverseAndAdd/신재동: Difference between revisions

From ZeroWiki
imported>Unknown
No edit summary
 
(Repair batch-0003 pages from live compare)
Line 7: Line 7:
         reverseStr = ''
         reverseStr = ''
         for i in range(len(numberStr)):
         for i in range(len(numberStr)):
             reverseStr += numberStr[len(numberStr) - i - 1]
             reverseStr += numberStr[len(numberStr) - i - 1]
         return int(reverseStr)
         return int(reverseStr)
   
   
Line 13: Line 13:
         numberStr = str(number)
         numberStr = str(number)
         for i in range(len(numberStr)):
         for i in range(len(numberStr)):
             if(numberStr[i] != numberStr[len(numberStr) - i - 1]):
             if(numberStr[i] != numberStr[len(numberStr) - i - 1]):
                 return False
                 return False
         return True
         return True
Line 52: Line 52:
     result = raa.reverseAndAdd(int(input()))
     result = raa.reverseAndAdd(int(input()))
     if(result != None):
     if(result != None):
         print str(result[0]) + ' ' + str(result[1])
         print str(result[0]) + ' ' + str(result[1])
----
----
그리 맘에 들지는 않는다. --재동
그리 맘에 들지는 않는다. --재동
Line 59: Line 59:


  >>> n=4321
  >>> n=4321
  >>> int(str(n)[::-1]) #python 2.3이상
  >>> int(str(n)[::-1]) #python 2.3이상
  1234
  1234
  >>> int(''.join(reversed(str(d)))) #python 2.4이상
  >>> int(''.join(reversed(str(d)))) #python 2.4이상
Line 68: Line 68:
위 코드를 이용하면...
위 코드를 이용하면...


  >>> def rev(d): return int(str(d)[::-1])
  >>> def rev(d): return int(str(d)[::-1])
   
   
  >>> def revAndAdd(d):
  >>> def revAndAdd(d):
Line 87: Line 87:


  마치 ''pseudo code''를 보는 것 같네요. --재동
  마치 ''pseudo code''를 보는 것 같네요. --재동

Revision as of 00:29, 27 March 2026

ReverseAndAdd/신재동

import unittest

class ReverseAndAdder:
    def reverse(self, number):
        numberStr = str(number)
        reverseStr = 
        for i in range(len(numberStr)):
            reverseStr += numberStr[len(numberStr) - i - 1]
        return int(reverseStr)

    def isPalindrome(self, number):
        numberStr = str(number)
        for i in range(len(numberStr)):
            if(numberStr[i] != numberStr[len(numberStr) - i - 1]):
                return False
        return True

    def reverseAndAdd(self, number):
        count = 0
        for i in range(1000):
            number = number + self.reverse(number)
            count += 1
            if(self.isPalindrome(number)):
                break
        else:
            print 'No reverse and add'
            return None
        return (count, number)
        
class ReverseAndAdderTestCase(unittest.TestCase):
    def testReverse(self):
        raa = ReverseAndAdder()
        self.assertEquals(1234, raa.reverse(4321))
        self.assertEquals(12321, raa.reverse(12321))

    def testIsPalindrome(self):
        raa = ReverseAndAdder()
        self.assertEquals(False, raa.isPalindrome(4321))
        self.assertEquals(True, raa.isPalindrome(12321))
        self.assertEquals(True, raa.isPalindrome(1221))

    def testReverseAndAdd(self):
        raa = ReverseAndAdder()
        self.assertEquals((4, 9339), raa.reverseAndAdd(195))
        self.assertEquals((5, 45254), raa.reverseAndAdd(265))
        self.assertEquals((3, 6666), raa.reverseAndAdd(750))
        
if __name__ == '__main__':
    #unittest.main()
    raa = ReverseAndAdder()
    result = raa.reverseAndAdd(int(input()))
    if(result != None):
        print str(result[0]) + ' ' + str(result[1])

그리 맘에 들지는 않는다. --재동


reverse 메소드 대신에 다음과 같이 간단히 할 수 있다:

>>> n=4321
>>> int(str(n)[::-1]) #python 2.3이상
1234
>>> int(.join(reversed(str(d)))) #python 2.4이상
1234

파이썬에서 for 루프를 먼저 생각하는 것은 사고의 단위가 작은 것이고, 이것은 영문독해를 할 때 한번에 한단어씩 보는 것과 구문을 한번에 보는 것의 차이와 비교할 수도 있다.

위 코드를 이용하면...

>>> def rev(d):	return int(str(d)[::-1])

>>> def revAndAdd(d):
	c=0
	while True:
		rd=rev(d)
		if d==rd:break
		d+=rd
		c+=1
	return c,d

>>> revAndAdd(195)
(4, 9339)

all tests data will be computable with less than 1000 iterations (additions)를 고려한다면 명시적인 회수 체크는 없어도 될 듯.

--JuNe

마치 pseudo code를 보는 것 같네요. --재동