📚수 자료형
🔍정수형
정수형에는 양의 정수(+), 음의 정수(-), 0이 있다.
a = 1000 # 양의 정수
print(a)
a = -7 # 음의 정수
print(a)
a = 0 # 0
print(a)
# 출력
1000
-7
0
🔍실수형
실수형은 소수점 아래의 데이터를 포함하는 수 자료형이다.
소수부가 0이거나, 정수부가 0인 소수는 0을 생략하고 작성할 수 있다.
a = 157.93 # 양의 실수
print(a)
a = -1837.2 # 음의 실수
print(a)
a = 5. # 소수부가 0일 때 0을 생략
print(a)
a = -.7 # 정수부가 0일 때 0을 생략
print(a)
# 출력
157.93
-1837.2
5.0
-0.7
실수형 데이터를 표현하는 방식으로 파이썬에서는 e나 E를 이용한 지수 표현 방식을 이용할 수 있다.
예를 들어 1e9라고 입력하면, 10의 9제곱 즉, 1,000,000,000(십억)이 된다.
(보통 최단 경로 문제에서 무한(INF)을 설정할 때 이용한다.)
보통 컴퓨터 시스템은 수 데이터를 처리할 때 2진수를 이용하며, 실수를 처리할 때는 부동 소수점 방식을 이용한다.
예를 들면 10진수 체계에서는 0.3과 0.6을 더한 값이 0.9로 정확히 떨어지지만,
2진수 체계 즉, 컴퓨터는 아래 예시 처럼 실수를 정확히 표현하지 못한다.
a = 0.3 + 0.6
print(a)
# 출력
0.8999999999999999
하지만 소수점 값을 비교하는 문제가 가끔 나오는데 이를 해결하기 위해 round() 함수를 이용할 수 있다.
round() 함수를 호출할 때는 인자(Argument)를 넣는데 첫 번째 인자는 실수형 데이터이고, 두 번째 인자는 반올림하고자 하는 위치에서 1을 뺀 값이다.
예를 들면 123.456을 소수점 셋째 자리에서 반올림을 하고싶으면 round(123.456, 2)라고 작성하며 결과는 123.46이다.
🔍수자료형의 연산
일반적으로 사칙연산(+, -, x, /)을 이용하여 계산하는데 이 중에 나누기 연산자(/)를 주의해야 한다.
파이썬에서 나누기 연산자(/)는 나눠진 결과를 기본적으로 실수형으로 처리하기 때문이다.
2진수를 이용하는 컴퓨터 체계에서는 실수를 정확히 표현하지 못함.
📚리스트 자료형
리스트는 여러 개의 데이터를 연속적으로 담아 처리하기 위해 사용할 수 있다.
파이썬의 리스트 자료형은 내부적으로 배열(array)를 채택하고 있으며, 연결 리스트 자료구조 기능을 포함하고 있어서 append(), remove()등의 메서드를 지원한다.
리스트 대신에 배열 혹은 테이블이라고 부르기도 한다.
🔍리스트 만들기
리스트는 대괄호[]안에 원소를 넣어 초기화하며, 쉼표로 원소를 구분한다.
리스트의 원소에 접근할 때는 인덱스 값을 괄호 안에 넣는다. 이때 인덱스는 0부터 시작한다.(즉, 리스트의 첫번째 원소는 인덱스 0)
그리고 비어 있는 리스트를 선언하고자 할 때는 list()혹은 간단히 대괄호[]를 이용할 수 있다.
**코딩 테스트 문제에서는 주로 크기가 N인 1차원 리스트를 초기화해야 하는데 다음 방식으로 초기화 하면 편리하다.
다음은 크기가 N이고, 모든 값이 0인 1차원 리스트를 초기화하는 소스코드이다.
n = 10
a = [0] * n
print(a)
# 출력
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
🔍리스트의 인덱싱과 슬라이싱
인덱스값을 입력하여 리스트의 특정한 원소에 접근하는 것을 인덱싱(indexing) 이라고 한다. 파이썬의 인덱스값은 양의 정수와 음의 정수를 모두 사용할 수 있으며, 음의 정수를 넣으면 원소를 거꾸로 탐색 하게 된다.
예를 들어 인덱스에 -1을 넣으면 가장 마지막 원소가 출력된다. 이런 성질을 이용하여 인덱싱을 하여 특정 원소에 접근한 뒤에, 그 값을 간단하게 바꿀 수 있다.
a = [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(a[-1]) # 뒤에서 첫 번째 원소 출력
print(a[-3]) # 뒤에서 세 번째 원소 출력
a[3] = 7 # 네 번째 원소 값 변경
print(a)
# 출력
9
7
[1, 2, 3, 7, 5, 6, 7, 8, 9]
또한 리스트에서 연속적인 위치를 갖는 원소들을 가져와야 할 때는 슬라이싱(slicing)을 이용할 수 있다.
이때는 대괄호 안에 콜론(:)을 넣어서 시작 인덱스와 (끝 인덱스 -1)을 설정할 수 있다. 예를 들어 a라는 리스트의 두 번째 원소부터 네 번째 원소까지의 모든 데이터를 갖는 리스트를 가져오고 싶다면 a[1:4]라고 넣는다. 앞서 말했듯 리스트의 인덱스는 0부터 출발하기 때문에 두 번째 원소의 인덱스는 1이 된다. 그리고 끝 인덱스의 경우 1을 뺀 값의 인덱스까지 처리된다. 그래서 a[1:4]라고 작성하면 된다.
a = [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(a[1:4]) # 두 번째 원소부터 네 번째 원소까지
# 출력
[2,3,4]
🔍리스트 컴프리헨션
리스트 컴프리헨션은 리스트를 초기화하는 방법 중 하나이다. 리스트 컴프리헨션을 이용하면 대괄호[] 안에 조건문과 반복문을 넣는 방식으로 리스트를 초기화할 수 있다.
이러한 리스트 컴프리헨션은 코딩 테스트에서 2차원 리스트를 초기화할 때 매우 효과적으로 사용될 수 있다. 예를 들어 N X M 크기의 2차원 리스트를 초기화할 때는 다음과 같이 사용한다.
n =3
m =4
a = [[0] * m for _ in range(n)]
print(a)
# 출력
[[0,0,0,0],[0,0,0,0],[0,0,0,0]]
참고로 특정 크기의 2차원 리스트를 초기화할 때는 반드시 리스트 컴프리헨션을 이용해야 한다.
🔍리스트 관련 기타 메서드
리스트와 관련한 기타 메서드를 사용하면 리스트 자료형을 효과적으로 이용할 수 있다. 주요 메서드는 다음 표와 같다.
메서드 명 | 사용법 | 설명 | 시간 복잡도 |
---|---|---|---|
append() | 변수명.append() | 리스트에 원소를 하나 삽일할 때 사용한다. | O(1) |
sort() | 변수명.sort() | 기본 정렬 기능으로 오름차순으로 정렬한다. | O(NlogN) |
reverse() | 변수명.reverse() | 리스트의 원소의 순서를 모두 뒤집어 놓는다. | O(N) |
insert() | 변수명.insert(삽입할 위치 인덱스, 삽입할 값) | 특정한 인덱스 위치에 원소를 삽입할 때 사용한다. | O(N) |
count() | 변수명.count(특정 값) | 리스트에서 특정한 값을 가지는 데이터의 개수를 셀 때 사용한다. | O(N) |
remove() | 변수명.remove(특정 값) | 특정한 값을 갖는 원소를 제거하는데, 값을 가진 원소가 여러 개면 하나만 제거한다. | O(N) |
📚문자열 자료형
🔍문자열 초기화
문자열 변수를 초기화할 때는 큰따옴표(")나 작은따옴표(')를 이용한다.
문자열을 큰따옴표로 구성할 때는 내부적으로 작은따옴표를 포함할 수 있고,
반대로 작은따옴표로 구성할 때는 내부적으로 큰따옴표를 포함할 수 있다.
혹은 백슬래시를 사용하면, 큰따옴표나 작은따옴표를 문자열에 원하는 만큼 포함시킬 수 있다.
data = 'Hello World'
print(data)
data = "Dont't you know \"Python\"?"
print(data)
# 출력
Hello World
Don't you know "Python"?
🔍문자열 연산
파이썬은 문자열에 대한 연산도 지원하는데 문자열을 처리할 때 유용하게 사용할 수 있다. 예를 들어 문자열 변수에 덧셈(+)을 이용하면 단순히 문자열이 더해져서 연결된다.
또한, 문자열 변수를 양의 정수와 곱하는 경우, 문자열이 그 값만큼 여러 번 더해진다.
파이썬의 문자열은 내부적으로 리스트와 같이 처리된다. 문자열은 여러 개의 문자가 합쳐진 리스트라고 볼 수 있다. 따라서 문자열 데이터에 대해서도 마찬가지로 인덱싱과 슬라이싱을 이용할 수 있다.
a = "ABCDEF"
print(a[2 : 4])
# 출력
CD
📚튜플 자료형
파이썬의 튜플 자료형은 리스트와 거의 비슷한데 다음과 같은 차이가 있다.
- 튜플은 한 번 선언된 값을 변경할 수 없다.
- 리스트는 대괄호([])를 이용하지만, 튜플은 소괄호(())를 이용한다.
보통 튜플 자료형은 그래프 알고리즘을 구현할 때 자주 사용된다. 이렇게 알고리즘을 구현하는 과정에서 일부러 튜플을 이용하게 되면 혹여나 자신이 알고리즘을 잘못 작성함으로써 변경하면 안되는 값이 변경되고 있지는 않은지 체크할 수 있다. 또한 튜플은 리스트에 비해 상대적으로 공간 효율적이고, 일반적으로 각 원소의 성질이 서로 다를 때 주로 사용한다.
📚사전 자료형
🔍사전 자료형 소개
사전 자료형은 키(key)와 값(value)의 쌍을 데이터로 가지는 자료형이다. 앞서 다룬 리스트나 튜플은 값을 순차적으로 저장하는 반면에 사전 자료형은 키-깂 쌍을 데이터로 가진다는 점에서 우리가 원하는 변경 불가능한 데이터를 키로 사용할 수 있다.
파이썬의 사전 자료형은 내부적으로 '해시 테이블(Hash Table)'을 이용하므로 기본적으로 데이터의 검색 및 수정에 있어서 O(1)의 시간에 처리할 수 있다. 키-값 쌍으로 구성된 데이터를 처리함에 있어서 리스트보다 훨씬 빠르게 동작한다는 점을 기억하자.
data = dict()
data['사과'] = 'Apple'
data['바나나'] = 'Banana'
data['코코넛'] = 'Coconut'
print(data)
# 출력
{'사과': 'Apple', '바나나': 'Banana', '코코넛': 'Coconut'}
🔍사전 자료형 관련 함수
또한 사전 자료형을 잘 이용하기 위해서는 이와 관련한 다양한 함수에 대해서 알아야 한다. 대표적으로는 키와 값을 별도로 뽑아내기 위한 함수가 있다. 키 데이터만 뽑아서 리스트로 이용할 때는 keys() 함수를 이용하며, 값 데이터만을 뽑아서 리스트로 이용할 때는 values() 함수를 이용한다.
📚집합 자료형
🔍집합 자료형 소개
파이썬에서는 집합(set)을 처리하기 위한 집합 자료형을 제공하고 있다. 집합은 기본적으로 리스트 혹은 문자열을 이용해서 만들 수 있는데, 집합은 다음과 같은 특징이 있다.
- 중복을 허용하지 않는다.
- 순서가 없다.
기본에 다루었던 리스트나 튜플은 순서가 있기 때문에 인덱싱을 통해 자료형의 값을 얻을 수 있었다. 반면에 사전 자료형과 집합 자료형은 순서가 없기 때문에 인덱싱으로 값을 얻을 수 없다는 특징이 있다. 이와 더불어 집합 자료형에서는 키가 존재하지 않고, 값 데이터만을 담게 된다. 특정 원소가 존재하는지를 검사하는 연산의 시간 복잡도는 사전 자료형과 마찬가지로 O(1)이다.
집합 자료형은 '특정한 데이터가 이미 등장한 적이 있는지 여부' 를 체크할 때 효과적이다. 집합 자료형을 초기화할 때는 set() 함수를 이용하거나, 중괄호({}) 안에 각 원소를 콤마(,)를 기준으로 구분해서 넣으면 된다.
🔍집합 자료형의 연산
기본적인 집합 연산으로는 합집합, 교집합, 차집합 연산이 있다. 집합 자료형 데이터 사이에서 합집합을 계산할 때는 '|'를 이용한다. 또한 교집합은 '&'. 차집합은 '-'를 이용한다.
a = set([1,2,3,4,5])
b = set([3,4,5,6,7])
print(a | b) # 합집합
print(a & b) # 교집합
print(a - b) # 차집합
# 출력
{1, 2, 3, 4, 5, 6, 7}
{3, 4, 5}
{1, 2}
🔍집합 자료형 관련 함수
메서드 명 | 사용법 | 설명 |
---|---|---|
add() | 변수명.add() | 하나의 집합 데이터에 값을 추가할 때 사용한다. |
update() | 변수명.update() | 여러 개의 값을 한꺼번에 추가할 때 사용한다. |
remove() | 변수명.remove() | 특정한 값을 제거할 때 사용한다. |
이때 add(), remove() 함수는 모두 시간 복잡도가 O(1)이다.
※ 해당 포스팅은「이것이 취업을 위한 코딩테스트다(나동빈 저)」책 내용을 바탕으로 작성하였습니다.