컴퓨터 사이언스 (CS)/자료구조 및 알고리즘

07. 파이썬을 활용한 문제해결

한소희DE 2021. 6. 3. 23:52
오늘은 파이썬을 활용한 문제 해결 방법을 간단히 살펴보고자 한다. 앞서 내가 주로 사용하는 파이썬 언어는 어떤 언어인지 살펴볼 것이다.

 

 

목차

정규표현식(=정규식)

얕은 복사와 깊은 복사

파이썬

 


 

 

01. 정규표현식(=정규식)

정규표현식이란, 특정한 규칙을 가진 문자열의 집합을 사용하는 데에 표현하는 언어다.

 

주로 복잡한 문자열을 처리할 때 사용한다.

정규표현식의 예시는 무엇이 있을까?

예를 들어, 주민등록번호 뒷자리 7자리를 별표(*) 처리하고 싶다고 할 때, 정규표현식을 사용한다면 보다 간편하고 직관적인 코드를 짤 수 있다.

정규표현식의 더 많은 예시로는, 아래 링크를 걸어두도록 하겠다.
https://wikidocs.net/1642

 

파이썬에서는 이런 정규표현식을 re 모듈로 지원하는데, 딥러닝(텍스트마이닝) 한 사람들이면 이 라이브러리가 익숙할 수 있겠다. 텍스트 전처리 시, 불용어나 특수기호 등을 제거할 때 사용됐다.

 

 import re 
 wordlist = ["color", "colour", "work", "working", "fox", "worker", "working"] 
 
 for word in wordlist: 
 	if re.search('col.r', word): 
    	print(word)

이처럼 col로 시작하고 r이 끝나는 단어들을 'col.r'로 정규표현식으로 작성하니 코드의 가시성이 높아졌다!

   


02. 얕은 복사와 깊은 복사

얕은 복사란, 특정 값을 복사한 복제본이 있을 때, 원본값(혹은 복제 값)의 내용을 변경한 경우, 남은 원본 값(혹은 복제 값)의 내용까지 변경된 내용이 적용되는 복사다.

 

즉 얕은 복사는 원본값과 복제 값이 유기적으로 연결돼 있다.


 

이에 반해, 깊은 복사란, 얕은 복사와 달리 복제값과 원본 값이 정말 분리돼 있다. 복제값을 변경하든, 원본 값을 변경하든, 데이터의 변화값이 타 복제 값 혹은 원본 값에 영향을 주지 않는다.

 

이는 아래 코드를 보면 확실히 알 수 있다.

 

import copy
list_var = [[1,2],[3,4]]

# 얕은 복사
list_var_copy_1 = list_var.copy()
list_var_copy_2 = list_var.copy()

# 깊은 복사
list_var_deepcopy = copy.deepcopy(list_var)
list_var[1].append(5)



# 출력값: [[1, 2], [3, 4, 5]]
print(list_var)

# 출력값: [[1, 2], [3, 4, 5]]
print(list_var_copy_1)

# 출력값: [[1, 2], [3, 4, 5]]
print(list_var_copy_2)

# 출력값: [[1, 2], [3, 4]]
print(list_var_deepcopy)

 

list_var(원본값)에 5라는 값을 추가했을 때, list_var_copy_1, list_var_copy_2의 경우 별도 조정 없이도 5가 추가된다. 이에 반해, 깊은 복사를 수행한 list_var_deepcopy의 경우에는 5가 추가되기 전 값을 깊은 복사한 것이므로, 5가 생성되지 않는다.

   


 

03. 파이썬

3-1. 파이썬 개념

파이썬(Python)은 1990년 암스테르담의 귀도 반 로섬(Guido Van Rossum)이 개발한 인터프리터 언어이다. 귀도는 파이썬이라는 이름을 자신이 좋아하는 코미디 쇼인 "몬티 파이썬의 날아다니는 서커스(Monty Python’s Flying Circus)"에서 따왔다고 한다.

 인터프리터 언어란 한 줄씩 소스 코드를 해석해서 그때그때 실행해 결과를 바로 확인할 수 있는 언어이다.

 

 

3-2. 파이썬의 특징

파이썬은 공동작업 및 유지보수가 상대적으로 쉽고 편리하다. 무료이고, 상대적으로 문법이 쉬운 편에 속한다. 왜 쉽냐면, 사람의 사고 체계와 매우 닮아 있기 때문이다. 다른 코드들과는 달리, 인간의 사고체계 순서대로 코드를 짤 수 있기 때문에, 코드를 이해하고 익히는 데에 상대적으로 쉽다고 느껴지는 것이다.

 

⬇ 추가적 참고 링크는 아래와 같다.

 

위키독스

온라인 책을 제작 공유하는 플랫폼 서비스

wikidocs.net

 

 

3-3. 파이썬 버전 3

파이썬의 이전 버전(2.x)의 경우, 2.7을 끝으로 2020년 1월 1일 이후로 유지보수 없이 종료됐다. 3버전은 새롭게 버전이 계속 증가&관리되고 있는 방식이므로, 3 버전을 사용하는 것이 좋다.

 

🔥 그렇다면 파이썬 이전 버전과 현 버전의 대표적 차이는 무엇이 있을까? 

파이썬 2.x 버전은 ※ASCII 방식(Unicode 쓰려면 별도 설정 필요)이었으나, 3.x의 기본 저장 방식은 ※Unicode다.
파이썬 3은 모든 변수가 객체(object)로 처리된다.
파이썬 3은 파이썬 2와 달리, print 시 괄호를 필수로 작성해야 한다.
파이썬 3은 파이썬 2와 달리, int 나누기 결과가 float이다. 파이썬 2는 나눈 결과값의 타입이 int였다.

이런 차이가 있기 때문에, pthon 2와 python 3은 완벽한 호환이 되지 않을 수 있다. 이럴 때, 소스코드 버전을 변환하는 코드를 활용해주어야 한다고 한다. (아직 나는 소스코드 변환은 해본 적은 없지만! 이런 상황이 생길 수 있으니 잊지 않고 참고하자!)

     

    🔥 여기서 잠깐! ASCII & Unicode란? 

    문자나 기호 집합을 컴퓨터에 저장 혹은 통신 목적으로 사용할 때, 특정 부호로 인코딩을 해야 하는데, 이러한 인코딩 방식 중 대표적 방식이 ASCII와 Unicode다.

    ASCII, ANSI, 그리고 Unicode를 살펴보자. 

    1) ASCII 
    7비트, 즉 128개의 고유값만 사용하는 부호체계. 컴퓨터 저장 기본 단위가 1바이트(8비트)인데, 이는 1비트를 통신에러 검출을 위해 사용(Parity Bit)하므로 7비트만 사용한다. 이는 모든 알파벳(대소문자구분), 숫자, 부호들이 고유 숫자 값으로 할당되어 있다. (총 128개)

    2) ANSI
    128개로 모든 언어 표현에는 한계가 있었으므로, ANSI가 탄생했다. 1비트 더 늘어나 256개의 부호를 할당할 수 있게 됐다. 그럼에도 한국어나 중국어같은 언어를 인코딩하기 어려웠다. 그래서 Unicode가 탄생했다.

    3) Unicode
    전 세계 언어의 문자를 정의하기 위한 국제 표준 코드다. 총 2바이트(16비트. 2의 16제곱 = 65,536개)로 구성돼 있다. 그럼에도 고어나 아랍어 등을 담기에는 부족했기 때문에, Unicode는 보충언어판을 통해 기본 영역의 일부를 상위 대행 & 하위 대행으로 할당해 약 백만 자가 넘는 문자를 추가로 정의할 수 있게 됐다.