개발자 면접 트레이딩 - 파이썬 알고리즘 문제(5)
(1). 개발자 면접 트레이닝 - 문자열을 입력받아 중복되는 문자를 압축하는 알고리즘
① Buffer를 활용하여 문자의 입력 순서대로 중복되는지 체크하자.
② for 문과 if문으로 간단하게 작성 가능다.
③ 입력문자의 길이와 출력문자의 길이가 다를 경우 예외도 반드시 처리
④ 반복되는 문자가 없을 경우 예외도 반드시 처리
⑤ 예를들어 AABBBBBCCDEFF 는 -> A2B5C2D1E1F2 , ABC -> ABC
(2). 소스 코드
PYTHON
#string_comp.py
import unittest
def compressword(input):
buffer = None
output = ""
cnt = 1
for ch in input:
if buffer is None:
output += ch
buffer = ch
else:
if buffer == ch:
cnt += 1
else:
output += str(cnt)
cnt = 1
output += ch
buffer = ch
output += str(cnt)
if len(output) > len(input):
return input
else:
return output
class compress_test(unittest.TestCase):
def test(self):
self.assertEqual("a1b2c7d1",compressword("abbcccccccd"))
print(compressword("abbcccccccd"))
self.assertEqual("a1b7c2d2", compressword("abbbbbbbccdd"))
print(compressword("abbbbbbbccdd"))
self.assertEqual("abc", compressword("abc"))
print(compressword("abc"))
self.assertEqual("aabcc", compressword("aabcc"))
print(compressword("aabcc"))
unittest.main()
(3). 소스 코드 분석
① 7 라인 : 함수 선언
② 12 라인 : for 문안에 if문을 이용하여 중복되는 문자가 존재하는지 확인
③ 28 라인 : 입력 문자열과 압축문자열의 길이를 비교하여 예외처리
④ 36 라인 : assertEqual 함수로 입출력 비교 단위테스트
⑤ 37 라인 : 압축결과 시험 출력
이번 예제에서는 Python 의 중첩 for(반복문), if(조건문) 구문을 확실히 이해해 두자.
(4). 실행결과1 - (압축 후 비교 결과 같은 경우)
(5). 실행결과2 - (압축 후 비교 결과 다른 경우)
'언어 > Python' 카테고리의 다른 글
파이썬 알고리즘 - 링크드리스트(LinkedList)에서 끝 에서 N 번째 값 (0) | 2017.08.22 |
---|---|
파이썬 알고리즘 - 링크드리스트(LinkedList)에서 중복 제거하기 (0) | 2017.08.21 |
파이썬 알고리즘 - 공백을 %20으로 변환하기 (0) | 2017.08.19 |
파이썬 알고리즘 - 문자열로 서로 다른 단어 만들어내기(Anagram) (0) | 2017.08.18 |
파이썬 알고리즘 - 문자열 입력받아 역(Reverse)으로 출력 (0) | 2017.08.16 |