상대 속도 약 1.35. test2와 test3의 간격이 너무 크다. 작성하는데 얼마나 걸리는 지 또 안재어봤다.
_signature를 그냥 쉘에서 해봤었는데 _signature를 테스트로 넣었어야 했다.
_signature를 그냥 쉘에서 해봤었는데 _signature를 테스트로 넣었어야 했다.
~cpp import unittest class Anagram: def __init__(self): self._anagrams = {} def add(self, word): s = self._signature(word) if self._anagrams.has_key(s): self._anagrams[s].append(word) else: self._anagrams[s] = [word] def anagrams(self): return self._anagrams.values() def _signature(self, word): s = list(word) s.sort() return "".join(s) class AnagramTestCase(unittest.TestCase): def test1(self): anagram = Anagram() anagram.add('abc') self.assert_(['abc'] in anagram.anagrams()) def test2(self): anagram = Anagram() anagram.add('abc') anagram.add('bac') self.assert_(['abc', 'bac'] in anagram.anagrams()) def test3(self): anagram = Anagram() anagram.add('efg') anagram.add('abc') anagram.add('bac') self.assert_(['abc', 'bac'] in anagram.anagrams()) self.assert_(['efg'] in anagram.anagrams()) if __name__ == "__main__": #unittest.main(argv=('', '-v')) import sys import time t1 = time.clock() anagram = Anagram() for word in sys.stdin: anagram.add(word.strip()) for words in anagram.anagrams(): print ' '.join(words) t2 = time.clock() print t2 - t1
P3 700MGhz 384MB Win2000 Python 2.2.1에서 17만 단어로 실행하면 8.8초.