Lecture 1.1

  1. 문자열 안에 문자들이 전부 유일한지를 확인하는 알고리즘
    • ["가", "나", "다", "라] -> return True
    • ["가", "가", "나", "다"] -> return False

process

  1. 형변환 (String to ASCII)
  2. 해쉬 생성 (해쉬의 초기값은 아스키 코드의 범위인 0~255의 길이를 가지는 리스트)
  3. 입력 리스트의 요소들을 읽어 들이면서 해쉬안에 처음 들어가는 요소라면 True 로 바꾸어준다.
  4. 만약 리스트의 요소값의 인덱스가 True 라면 중복되었다는 의미이므로 return False

In [1]:
def find_overlap(string):
    # 아스키 코드로 변환
    convert_ord = [ord(i) for i in string]
    
    # 아스키 코드는 0~255 의 수 : ex("A":65)
    if len(set(convert_ord)) > 255:
        return False
    hash = [False] * 256
    
    for i in convert_ord:
        if hash[i] is True:
            return False
        else:
            hash[i] = True
    return True         

input_list = ['A','B','D','F']
find_overlap(input_list)


Out[1]:
True

Lecture 1.2

  1. 문자열 뒤집기 알고리즘

Method

  1. 파이썬의 reverse() 함수이용
  2. 리스트 인덱싱 사용

In [2]:
input_list = [1,2,3,4]
def reverse_str_1(input_list):
    input_list.reverse()
    return input_list

def reverse_str_2(input_list):
    return input_list[::-1]

Lecture 1.3

  1. 두개의 문자열이 순열인지 파악하는 알고리즘 (대, 소문자는 구분하지 않는다, 중복 고려x)
    • ["I" "A" "E"] , ["A" "E" "I] -> return True
    • ["A" "A"] , ["B", "A"] -> return False

Process

  1. 문자열 소문자 처리.
  2. 문자열 Sort
  3. Strip 을 이용한 공백 제거
  4. 비교 연산자

Tip

파이썬의 sort() 는 공백을 우선적으로 처리한다.


In [3]:
def permutation(str_1,str_2):
    if ''.join(sorted(list(str_1))).lower().strip() == ''.join(sorted(list(str_2))).lower().strip():
        return True
    else:
        return False
    
permutation("abed","abde")


Out[3]:
True

Lecture 1.4

  1. 문자열에 공백이 있다면 "%20" 의 문자로 대체하기

Method

  1. 파이썬 replace()

In [4]:
def change_str(input_str):
    result = input_str.replace(" ","%20")
    return result

change_str("열공 하세요")


Out[4]:
'열공%20하세요'

Lecture 1.5

  1. 같은 문자 반복횟수를 이용한 문자열 압축
    • aabbccda -> a2b2c2d1a1

Process

  1. 형변환 String to List
  2. List 요소 순차적으로 읽기 (다음 Index 의 요소와 비교하기 위해 임수 변수 생성 필요)
  3. List 첫번째 요소값 처리
  4. 버퍼와 List 와의 값이 같다면 count +1
  5. 버퍼와 List 값이 다르다면 결과 리스트에 count 변수, 다음 요소값 추가, count 초기화

In [5]:
def zip_str(input_str):
    buffer = None
    list_str = list(input_str)
    result = []
    count = 1
    for i in range(len(list_str)):
        
        if i == 0:
            result.append(list_str[i])
            buffer = list_str[i]
        else:
            if buffer != list_str[i]:
                result.append(str(count))
                result.append(list_str[i])
                count = 1
            else:
                count += 1
    result.append(str(count))
    result = "".join(result)
    return result      

zip_str("aaabbccda")


Out[5]:
'a3b1b1c1c1d2'