4 분 소요

파이썬 자료구조 정리

  • 평소에 자세히 알지 못했던 부분만 부분적으로 정리함

실수형

a= 5.
a= -.9

-> 5.0
-> -0.7
위와 같이 . 붙이면 파이썬에서 알아서 실수형으로 전환해줌

지수 표현 방식

  • 파이썬에서 e나 E를 이용한 지수 표현 방식을 이용 할 수 있다.
    • e나 E 다음에 오는 수는 10의 지수부를 뜻
    • 1e9 는 10의 9제곱 -> 1,000,000,000
  • 최단 경로 알고리즘에서 도달할 수 없는 노드에 대해 최단 거리를 무한(INF) 로 설정된다.
a = 1e9 -> 1000000000.0

b = 75.25e1 -> 752.5 (75.25 x 10)

c = 3954e-3 -> 3.954 (3954 x 0.001)
  • 10진수 체계에서는 0.3 과 0.6을 더한 값이 0.9로 나온다
    • 컴퓨터 2진수에서는 0.9가 정확히 표현이 안된다.
    • 최대한 가깝게 표시하지만 오차가 있다
a = 0.3 + 0.9

if a == 0.9:
	print(True)
else:
	print(False)

-> False가 나옴
-> 0.899999999 이런식으로 나옴

round() 함수를 이용해서 처리하기

수 자료형의 연산

  • 파이썬은 나누기 연산이 실수형으로 반환
    • 그래서 몫의 값만 필요할 때는 // 로 사용해주면 됨
    • 자바에서는 그냥 몫만 나옴

리스트 컴프리핸션

  • 리스트 컴프리헨션은 2차원 리스트를 초기화할 때 효과적으로 사용될 수 있다.
  • 특히 N X M 크기의 2차원 리스트를 한 번에 초기화 해야 할 때 유용하다.
    • 좋은 예시 : array = [[0] * m for _ in range(n)]
  • 만약 2차원 리스트를 초기화할 때 다음과 같이 작성하면 예기치 않은 결과가 나올 수 있다.
    • 잘못된 예시 : array = [[0] * m] * n]
    • 위 코드는 전체 리스트 안에 포함된 각 리스트가 모두 같은 객체로 인식된다.

좋은 예시

  • 이렇게 작성할 경우 특정한 위치의 값을 변경할 때 정상적으로 변경이 됨

나쁜 예시

  • 해당 코드로 변경하면 빨간색 점이 있는 위치의 데이터만 바뀌여야하지만 전체가 바뀌게 된다.

리스트 관련 기타 메서드

튜플 자료형

  • 튜플 자료형은 리스트와 유사하지만 다음과 같은 문법적 차이가 있다.
    • 튜플은 한 번 선언된 값을 변경할 수 없다.
    • 리스트는 [] 사용하지만 튜플은 ()를 이용한다.
    • 튜플은 리스트에 비해 상대적으로 공간 효율적이다.

튜플을 사용하면 좋은 경우

  • 서로 다른 성질의 데이터를 묶어서 관리할 때
    • 최단 경로 알고리즘에서는 (비용, 노드번호)의 형태로 튜플 자료형을 자주 이용한다.
  • 데이터의 나열을 해싱(Hashing)의 키 값으로 사용해야 할 때
    • 튜플은 변경이 불가능하므로 리스트와 다르게 키 값으로 사용될 수 있다.
  • 리스트보다 메모리를 효율적으로 사용해야 할 때

사전 자료형

  • 사전 자료형은 Key 와 Value 의 쌍을 데이터로 가지는 자료형
    • 앞서 다루었던 리스트와 튜플의 값을을 순차적으로 저장하는 것과는 대비됨
  • 사전 자료형은 키와 값의 쌍을 데이터로 가지며, 원하는 ‘변경 불가능한 자료형’을 키로 사용할 수 있다.
  • 파이썬의 사전 자료형은 해시 테이블(Hash Table)을 이용하므로 데이터의 조회 및 수정에 있어서 O(1)의 시간에 처리할 수 있다.
    • 초기화는 dict(), {}

집합 자료형

  • 집합은 다음과 같은 특징이 있다.
    • 중복을 허용하지 않는다.
    • 순서가 없다.
  • 집합은 리스트 혹은 문자열을 이용해서 초기화할 수 있따.
    • 이때 set() 함수를 이용한다.
    • 혹은 중괄호 ({}) 안에 각 원소를 , 를 기준으로 구분해서 삽입함으로써 초기화 할 수 있다.
  • 데이터의 조회 및 수정에 있어서 O(1) 의 시간에 처리할 수 있다.
# 집합 자료형 초기화 방법 1 
data = set([1,1,2,3,4,4,5])
-> {1,2,3,4,5}

data = {1,1,2,3,4,4,5}
-> {1,2,3,4,5}
  • 위와 같이 중복이 존재하지 않는다.

집합 자료형의 연산

a = set([1,2,3,4,5])
b = set([3,4,5,6,7])

# 합집합
print(a|b)
-> {1,2,3,4,5,6,7}

# 교집합
print(a&b)
-> {3,4,5}

# 차집합
print(a-b)
-> {1,2}

집합 자료형 관련 함수

data = set([1,2,3])

# 새로운 원소 추가
data.add(4)
print(data)
-> {1,2,3,4}

# 새로운 원소 여러 개 추가
data.update([5,6])
print(data)
-> {1,2,3,4,5,6}

# 특정한 값을 갖는 원소 삭제
data.remove(3)
print(data)
-> {1,2,4,5,6}

사전 자료형과 집합 자료형의 특징

  • 리스트나 튜플은 순서가 있기 때문에 인덱싱을 통해 자료형의 값을 얻을 수 있따.
  • 사전 자료형과 집합 자료형은 순서가 없기 때문에 인덱싱으로 값을 얻을 수 없다.
    • 사전의 키(key) 혹은 집합의 원소 (element)를 이용해 O(1) 의 시간 복잡도로 조회한다.

자주 사용되는 표준 입력 방법

  • input() 함수는 한 줄의 문자열을 입력 받는 함수
  • map() 함수는 리스트의 모든 원소에 각각 특정한 함수를 적용할 때 사용
    • 예시) 공백을 기준으로 구분된 데이터를 입력 받을 떄는 다음과 같이 사용
      • list(map(int, input().split()))
    • 예시) 공백을 기준으로 구분된 데이터의 개수가 많지 않다면, 다음과 같이 단순히 사용
      • a,b,c = map(int, input().split())

빠르게 입력 받기

  • 사용자로부터 입력을 최대한 빠르게 받아야 하는 경우
  • sys 라이브러리에 정의되어 있는 sys.stdin.readline() 메서드 이용
    • 단 입력 후 엔터가 줄 바꿈 기호로 입력되므로 rstrip() 메서드를 함께 사용

자주 사용되는 표준 출력 방법

  • 파이썬에서 기본 출력은 print() 함수를 이용한다.
    • 각 변수를 콤마 , 를 이용하여 띄어쓰기로 구분하여 출력할 수 있따.
  • print() 는 기본적으로 출력 이후에 줄 바꿈을 수행한다.
    • 줄 바꿈을 원치 않는 경우 end 속성을 이용할 수 있다.

list 연산자

  • 리스트, 튜플, 문자열, 딕셔너리 모두에서 사용 가능
in 연산자와 not in 연산자 설명
x in 리스트 리스트 안에 x가 들어가 있을 때 참 True 다.
X not in 문자열 문자열 안에 x가 들어가 있지 않을 때 True 다.

조건문 간소화

파이썬 continue

전역변수 & 지역변수

a = 10

def func():
	global a
	a += 1
	print(a)

func()

-> 11
------------------------------
a = 10

def func():
	
	a += 1
	print(a)

func()
-> 오류남func() 내부에서 a  선언안되어 있음
------------------------
a = 10

def func():

	print(a)

func()
-> 10  
단순히 참조는 오류가 안남
-------------------------
array = [1,2,3,4,5]

def func():
	array.append(6)
	print(a)

func()
-> [1,2,3,4,5,6]
----------------------
array = [1,2,3,4,5]

def func():
	array = [3,4,5]
	array.append(6)
	print(a)

func()
print(array)
-> [3,4,5,6]
-> [1,2,3,4,5]

여러 개의 반환 값

람다 표현식

실전에서 유용한 표준 라이브러리

  • itertools : 파이썬에서 반복되는 형태의 데이터를 처리하기 위한 유용한 기능들을 제공
    • 특히 순열과 조합 라이브러리는 코딩 테스트에서 자주 사용됨
  • heapq : 힙(heap) 자료구조를 제공
    • 일반적으로 우선순위 큐 기능을 구현하기 위해 사용
  • bisect : 이진 탐색 (Binary Search) 기능을 제공
  • collections : 덱(deque), 카운터(Counter) 등의 유용한 자료구조를 포함
  • math : 필수적인 수학적 기능을 제공
    • 펙토리얼, 제곱근, 최대공약수(GCD), 삼각함수 관련 함수부터 파이(pi)와 같은 상수를 포함

순열과 조합

카운터 Counter

최대 공약수와 최소 공배수

출처: https://www.youtube.com/watch?v=m-9pAwq1o3w&list=PLRx0vPvlEmdAghTr5mXQxGpHjWqSz0dgC

댓글남기기