언어/Python

파이썬 알고리즘 - 문자열을 입력받아 중복단어 압축하기

2017. 8. 20. 14:16

개발자 면접 트레이딩 - 파이썬 알고리즘 문제(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
'언어/Python' 카테고리의 다른 글
  • 파이썬 알고리즘 - 링크드리스트(LinkedList)에서 끝 에서 N 번째 값
  • 파이썬 알고리즘 - 링크드리스트(LinkedList)에서 중복 제거하기
  • 파이썬 알고리즘 - 공백을 %20으로 변환하기
  • 파이썬 알고리즘 - 문자열로 서로 다른 단어 만들어내기(Anagram)
[좋은사람]
[좋은사람]
좋은사람의 개발 노트 입니다.
[좋은사람]
좋은사람의 개발 노트
[좋은사람]
전체
오늘
어제
  • 전체보기 (189)
    • 언어 (68)
      • Java (12)
      • Python (39)
      • C# (5)
      • PHP (4)
      • Go (8)
    • OS (18)
      • Linux (7)
      • Windows 10 (5)
      • Etc (6)
    • 빅데이터 & 분석 (8)
      • R (0)
      • Machine Learning (8)
    • 네트워크 (4)
      • Etc (4)
    • 웹 프론트 (25)
      • Javascript & ECMA (8)
      • Vue (13)
      • React (4)
    • 웹 백엔드 (15)
      • Spring (3)
      • Django & Flask (7)
      • Npm & Express (5)
    • 개발도구 (18)
      • Jetbrains (3)
      • Eclipse (5)
      • Git (4)
      • Atom & VScode (6)
    • 데이터베이스 (7)
      • Oracle (2)
      • MariaDB & MySQL (2)
      • Etc (3)
    • 모바일 (6)
      • Android (3)
      • Hybrid (3)
    • 라이프 (20)
      • 여행 & 일상 (6)
      • 취미 (14)

블로그 메뉴

  • 홈으로
  • 블로그소개
  • 태그
  • 방명록

공지사항

인기 글

태그

  • flask
  • Linux
  • 커펌
  • 디자인패턴
  • vue.js
  • Django
  • 머신러닝
  • ubuntu
  • Java
  • windows10
  • go
  • 코딩 면접
  • 아톰 에디터
  • ATOM
  • Thread
  • nodejs
  • 리액트
  • SpringSTS
  • 윈도우10
  • CFW
  • Anaconda
  • react
  • 2DS
  • 개발자 면접
  • npm
  • ps4
  • OCR
  • Database
  • Eclipse
  • 3DS
  • Algorithm
  • Git
  • 이클립스
  • C#
  • php
  • javascript
  • python
  • 인텔리j
  • centos
  • 미뮤

최근 댓글

최근 글

hELLO · Designed By 정상우.
[좋은사람]
파이썬 알고리즘 - 문자열을 입력받아 중복단어 압축하기
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.