본문 바로가기
Data Science

[코딩테스트] 파이썬 문법 기초 복습 : 자료형

by Lora Baek 2022. 12. 19.
300x250

파이썬으로 코딩테스트를 준비하는 만큼,

문법의 기초를 탄탄히 다지는 것 또한 중요하다.

 

그 중, 파이썬 자료형에 대해서 정리해보자.

정수형, 실수형, 복소수형, 문자열, 리스트 튜플, 사전(딕셔너리) 등이 있다.

 

정수형

Integer : 양의 정수, 음의 정수, 0.

 

실수형

Real Number. 소수점 아래의 데이터를 포함하는 수 자료형.

소수부나 정수부가 0일 때 0을 생략할 수도 있다.

a=5.

print(a)

> 5.0

 

a = -.7

print(a)

> -0.7

 

e나 E를 이용해서 지수 표현 방식 이용 가능함.

1e9 == 10의 9제곱을 의미하게 됨.

지수 표현 방식은 임의의 큰 수를 표현하기 위해 자주 사용됨.

최단 경로 알고리즘에서는 도달할 수 없는 노드에 대하여 최단 거리를 무한(INF)로 설정하곤 하는데,

이 때 가능한 최댓값이 10억 미만이라면 무한(INF)의 값으로 1e9를 이용할 수 있다.

 

실수형을 저장하기 위해서 4바이트 혹은 8바이트의 고정된 크기의 메모리를 할당하므로, 컴퓨터 시스템은 실수 정보를 표현하는 정확도에 한계를 가진다.

예를 들어 10진수 체계에서는 0.3과 0.6을 더한 값이 0.9이지만,

2진수에서는 0.9를 정확히 표현할 수 없어 최대한 0.9에 가깝게 표현은 하지만 미세한 오차가 발생하게 된다.

 

실제로 이것 때문에 실수 값을 제대로 비교하지 못해 원하는 결과를 얻지 못할 수 있는데,

이럴 때 round() 함수를 이용하는 방법이 권장된다.

a = 0.3+0.6

print(round(a,4))

 

if round(a,4) ==0.9:

    print(True)

else:

    print(False)

 

수 자료형의 연산

나누기 연산자 / 는 나눠진 결과를 실수형으로 반환한다.

다양한 로직(홀수인지 체크하는 등) 을 설계할 때 나머지 연산자 %를 사용할 때가 많다.

몫 연산자(//), 거듭제곱 연산자(**)를 활용할 수 있다.

 

 

리스트 자료형

여러 개의 데이터를 연속적으로 담아 처리하기 위해 사용하는 자료형.

리스트 초기화 : [] 안에 원소 넣어 초기화, 쉼표로 원소 구분

비어 있는 리스트는 list() or []를 이용

인덱스 값으로 원소에 접근 가능하며, 인덱스가 0부터 시작함에 유의할 것

 

# 크기가 N이고 모든 값이 0인 1차원 리스트 초기화

n = 10

a = [0]*n

print(a)

 

리스트의 인덱싱과 슬라이싱

음의 정수를 넣으면 원소를 뒤에서부터 인덱싱 가능. 맨 뒤 : -1

연속적인 위치를 갖는 원소들은 : 으로 시작, 끝 인덱스 설정 가능.

이 때 끝 인덱스는 실제 인덱스보다 1을 더 크게 설정해야 함.

 

리스트 컴프리헨션 

짧고 간결하게 리스트를 초기화하는 방법 중 하나.

대괄호 안에 조건문과 반복문을 적용하여 리스트 초기화 가능.

 

2차원 리스트를 초기화할 때 효과적으로 사용될 수 있다.

특히 N x M 크기의 2차원 리스트를 한 번에 초기화해야 할 때 매우 유용하다.

array = [[0] * m for _ in range(n)]

 

단순히 array=[[0]*m]*n 과 같이 만들어버리면 전체 리스트 안에 포함된 각 리스트가 모두 같은 객체로 인식되어, 추후 몇행 몇열의 데이터 하나만 변경하려고 했음에도 전체가 변경되어버릴 수 있음.

 

언더바에 관하여

반복을 수행하되, 반복을 위한 변수의 값을 무시하고자 할 때 언더바를 자주 사용한다.

for _ in range(5):

    print("Hello World")

 

리스트 관련 기타 메서드와 시간 복잡도

변수명.append() :  원소 하나 삽입, O(1)

변수명.sort() : 오름차순 정렬, O(NlogN)

변수명.sort(reverse=True) : 내림차순 정렬, O(NlogN)

 

변수명.reverse() : 순서 뒤집기, O(N)

insert(삽입할 위치 인덱스, 삽입할 값) : O(N)

변수명.count(특정 값) : 특정 값 가지는 데이터 개수 세기, O(N)

변수명.remove(특정 값) : 특정 값 가지는 원소를 제거함. 단, 값을 가진 원소가 여러개면 하나만 제거. O(N)

 

 

문자열 자료형

data = 'Hello World'

data = "Don't you know \"Python\"?"

 

덧셈을 이용하면 문자열이 더해져서 연결되며,

특정 양의 정수와 곱하면 그 값만큼 여러번 더해진다.

인덱싱, 슬라이싱을 이용할 수는 있으나, Immutable이므로 특정 인덱스의 값을 변경할 수는 없다.

 

튜플 자료형

리스트와 유사하지만, 한 번 선언된 값을 변경할 수 없다.

소괄호()를 이용하며, 리스트에 비해 상대적으로 공간 효율적이다.(기능이 제한적이기 때문)

 

a = (1,2,3,4,5)

print(a[3])

print(a[1:4])도 가능.

 

언제 튜플을 사용하는가?

1. 서로 다른 성질의 데이터를 묶어서 관리해야 할 때. 최단경로 알고리즘에서는(비용, 노드번호)의 형태로 튜플을 자주 사용함.

2. 데이터의 나열을 해싱(hashing)의 키 값으로 사용해야 할 때. 튜플은 변경이 불가능하므로 키 값으로 사용될 수 있다.

3. 리스트보다 메모리를 효율적으로 사용해야 할 때.

 

사전 자료형

키, 값의 쌍을 데이터로 가지는 자료형.

변경 불가능한(immutable) 자료형을 키로 사용할 수 있고, 키 값을 사용해서 데이터에 접근할 수 있다.

파이썬의 사전 자료형은 해시 테이블(Hash table)을 이용하므로, 데이터의 조회 및 수정에 있어서 O(1)의 시간에 처리할 수 있다.

 

data= dict()

data['키'] = '값'

data["사과"]="Apple"

data["바나나"]="Banana"

 

if '사과' in data:

    print(True) # 특정 키가 존재하는지 검사하기 위해서 상수시간이 소요되므로, 리스트보다 훨씬 효율적.

 

사전 자료형에서는 keys(), values()를 이용해서 키 혹은 값 데이터만 뽑을 수 있는 메서드를 지원한다.

 

집합 자료형

중복을 허용하지 않고, 순서가 없음.

리스트나 문자열을 이용해서 초기화할 수 있으며, set()함수 이용 가능.

중괄호 안에 원소를 ,를 기준으로 구분해서 삽입함으로써 초기화할 수 있다.

데이터의 조회 및 수정을 O(1)의 시간에 처리할 수 있다!

 

연산 : 합집합 |, 교집합 &, 차집합 - 를 이용해 집합의 연산 가능.

 

집합 자료형 관련 함수

 

*리스트나 튜플은 순서가 있기 때문에 인덱싱을 통해 자료형의 값을 얻을 수 있다.

*사전 자료형, 집합 자료형은 순서가 없기 때문에 인덱싱은 불가. 사전의 키 혹은 집합의 원소를 이용해 O(1)의 시간 복잡도로 조회가 가능하다.

 

코딩테스트 준비하기

2022.12.18 - [Data Science] - [코딩테스트] 코딩테스트 및 관련 알고리즘의 개요

댓글