프로그래밍 | 2010. 4. 27. 23:43
abcdefgh | 1 |
abcdefhg | 2 |
abcdegfh | 3 |
.. | . |
fbhacdeg | 26521 |
.. | . |
hgfedcba | 40320 |
이렇게 8 개의 영문자로 만들어진 순열이 주어질 때,이 순열이 몇 번째에 나오는지를 출력하는 프로그램을 작성하라.
import unittest import copy class Words: def __init__(self): self.pumatationWordList = [] def getPermutationWordList(self): return self.pumatationWordList def getPermutationCount(self, findWord ): for i in range( 0, len(self.pumatationWordList) ): curWord = self.pumatationWordList[i] if curWord == findWord: return i+1 return -1 def permutation( self, wordList, words = [] ): for i in range( 0, len(wordList) ): tmpResultWord = copy.deepcopy( words ) tmpWordList = copy.deepcopy( wordList ) curWord = wordList[i] tmpWordList.remove( wordList[i] ) if( len(tmpWordList) != 0 ): tmpResultWord.append( curWord ) self.permutation( tmpWordList, tmpResultWord ) else: tmpResultWord.append( curWord ) self.pumatationWordList.append( "".join(tmpResultWord) ) def getWord( inputWord ): inputWordList = [] for i in range( 0, len(inputWord) ): inputWordList.append( inputWord[i] ) words = Words() words.permutation(inputWordList) return words.getPermutationWordList() def getWordCount( targetWordList, findWord ): inputWordList = [] for i in range( 0, len(targetWordList) ): inputWordList.append( targetWordList[i] ) words = Words() words.permutation(inputWordList) return words.getPermutationCount(findWord) class Test( unittest.TestCase ): def test_findwords(self): self.assertEquals( [ 'a' ] , getWord( 'a' ) ); self.assertEquals( [ 'ab', 'ba' ], getWord( 'ab' ) ) self.assertEquals( ['abc', 'acb', 'bac', 'bca', 'cab', 'cba'] , getWord( 'abc' ) ) self.assertEquals( ['abcd', 'abdc', 'acbd', 'acdb', 'adbc', 'adcb', 'bacd', 'badc', 'bcad', 'bcda', 'bdac', 'bdca', 'cabd', 'cadb', 'cbad', 'cbda', 'cdab', 'cdba', 'dabc', 'dacb', 'dbac', 'dbca', 'dcab', 'dcba'], getWord( 'abcd' ) ) def test_findWordCount(self): self.assertEquals( 1, getWordCount( 'a', 'a' ) ); self.assertEquals( 2, getWordCount( 'ab', 'ba' ) ); self.assertEquals( 24, getWordCount( 'abcd', 'dcba' ) ); self.assertEquals( 2, getWordCount( 'abcdefgh', 'abcdefhg' ) ); self.assertEquals( 40320, getWordCount( 'abcdefgh', 'hgfedcba' ) ); self.assertEquals( 26521, getWordCount( 'abcdefgh', 'fbhacdeg' ) ); if __name__ == "__main__": unittest.main()
LuaTinker로 싱글턴(Singleton) 넘기기 (1) | 2010.06.02 |
---|---|
Lua Binding (0) | 2010.05.30 |
일정 예측 (0) | 2010.04.23 |
소스코드 관리 시스템(SCM)에 로그 제대로 남기기 (0) | 2010.04.21 |
적절한 Test case를 선택하여 프로그램 테스트하기 (0) | 2010.03.20 |
Recent Comments