본 포스팅은 “이것이 취업을 위한 코딩테스트다 with 파이썬” - (한빛미디어, 나동빈 지음)을 바탕으로 공부한 내용을 정리한 것입니다.
- 수 자료형
- 정수형
- 실수형
- 수 자료형의 연산
- 리스트 자료형
- 리스트 만들기
- 인덱싱, 슬라이싱
- 리스트 컴프리헨션
- 기타 메서드
- 문자열 자료형
- 문자열 초기화
- 문자열 연산
- 튜플 자료형
- 사전 자료형
- 사전 자료형
- 관련 함수
- 집합 자료형
- 집합 자료형
- 연산, 함수
"알고리즘 문제 풀이를 포함하여 모든 프로그래밍은 결국 데이터를 다루는 행위인 만큼, 자료형에 대한 이해는 프로그래밍의 길에 있어서의 첫걸음이라고 할 수 있다."
1. 수 자료형
정수형
정수를 다루는 자료형이며 양의 정수, 음의 정수, 0이 있다.
코딩테스트에서 출제되는 알고리즘 문제는 대부분 입출력이 정수형이다.
실수형
지수 표현 방식은 코딩 테스트에서 많이 사용되는데, 최단 경로 문제에서는 도달할 수 없는 노드에 대하여 최단 거리를 ‘무한(INF)’으로 설정하곤 한다.
보통 컴퓨터 시스템은 수 데이터를 처리할 때 2진수를 이용하며, 실수를 처리할 때 부동소수점 방식을 이용한다.
오늘날 가장 널리 쓰이는 IEEE754 표준에서는 실수형을 저장하기 위해 4바이트, 혹은 8바이트라는 고정된 크기의 메모리를 할당하며, 이러한 이유로 인해 현대 컴퓨터 시스템은 대체로 실수 정보를 표현하는 정확도에 한계를 가진다.
따라서 소수점 값을 비교하는 작업이 필요한 문제라면 실수 값을 비교하지 못해서 원하는 결과를 얻지 못할 수 있다. 이럴 때는 round() 함수를 이용할 수 있다.
예를 들어, 0.3과 0.6을 더한 값이 0.899999로 나올 수도 있다.
수 자료형의 연산
프로그래밍에서는 사칙연산 (+,-,x,/)을 이용해 계산한다.
/ | 실수형으로 나눗셈을 처리 |
% | 나머지 연산자 |
// | 몫 연산자 |
** | 거듭제곱 |
2. 리스트 자료형
리스트는 여러 개의 데이터를 연속적으로 담아 처리하기 위해 사용할 수 있다.
파이썬의 리스트 자료형은 C나 자바와 같은 프로그래밍 언어의 배열 기능을 포함하고 있다.
내부적으로 연결 리스트 자료구조를 채택하고 있어서 append()
, remove()
등의 메서드를 지원한다.
파이썬의 리스트는 C++의 STL vector와 유사하며, 리스트 대신에 배열 혹은 테이블이라고 부르기도 한다.
리스트 만들기
1
2
3
4
5
# 빈 리스트 선언 방법 1)
a = list()
# 빈 리스트 선언 방법 2)
a = []
크기가 N이고 모든 값이 0인 1차원 리스트를 초기화하는 방법
1
2
3
n = 10
a = [0] * n
print(a) # 결과 [0,0,0,0,0,0,0,0,0,0]
인덱싱, 슬라이싱
인덱스값을 입력하여 리스트의 특정한 원소에 접근하는 것을 인덱싱이라 한다.
파이썬의 인덱스값은 양의 정수와 음의 정수를 모두 사용할 수 있으며, 음의 정수를 넣으면 원소를 거꾸로 탐색하게 된다.
리스트에서 연속적인 위치를 갖는 원소들을 가져와야 할 때는 슬라이싱을 이용할 수 있다.
대괄호 안에 콜론(:)을 넣어서 시작 인덱스와 (끝 인덱스 -1)을 설정할 수 있다.
리스트 컴프리헨션
리스트 컴프리헨션은 리스트를 초기화하는 방법 중 하나이다.
([]) 안에 조건문과 반복문을 넣는 방식이다.
0부터 19까지 홀수만 포함하는 리스트 만들기
1
2
array = [i for i in range(20) if i % 2 == 1]
# [1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
0부터 19까지 홀수만 포함하는 리스트 만들기
더 일반적인 소스
1
2
3
4
5
array = []
for i in range(20):
if i % 2 == 1:
array.append(i)
# [1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
1부터 9까지 제곱 값 포함하는 리스트 만들기
1
2
array = [i * i for i in range(1,10)]
# [1, 4, 9, 16, 25, 36, 49, 64, 81]
N * M 크기 2차원 리스트 초기화
1
2
3
4
5
n = 3
m = 3
array = [[0]*m for _ in range(n)]
# [[0,0,0], [0,0,0], [0,0,0], [0,0,0]]
## 기타 메서드
기타 메서드
append() | 리스트에 원소를 하나 삽입할 때 |
sort() | 오름차순 정렬 |
sort(reverse = True) | 내림차순 정렬 |
reverse() | 원소 순서 뒤집기 |
insert(삽입 위치 인덱스, 삽입할 값) | 원소 삽입 |
count() | 데이터 개수 셀 때 |
remove() | 원소 제거, 여러개면 하나만 제거 |
insert()
와 remove()
의 시간 복잡도를 줄이며, 특정 값의 원소를 모두 제거할 때 다음과 같은 방법 활용.
특정 값 모두 제거하는법
1
2
3
4
a = [1,2,3,4,5,5,5]
remove_set = {3,5}
result = [i for i in a if i not in remove_set]
# [1, 2, 4]
3. 문자열 자료형
문자열 초기화
- 문자열을 큰따옴표로 구성하는 경우, 내부적으로 작은따옴표 포함가능
- 문자열을 작은따옴표로 구성하는 경우, 내부적으로 큰따옴표 포함가능
- 백슬래시()를 사용하면, 큰따옴표나 작은따옴표를 원하는 만큼 포함가능
문자열 연산
리스트와 같이 처리된다.
4. 튜플 자료형
튜플 자료형은 리스트와 거의 비슷한데 다음과 같은 차이가 있다.
- 튜플은 한 번 선언된 값을 변경할 수 없다.
- 리스트는 대괄호([])를, 튜플은 소괄호(())를 이용한다.
그래프 알고리즘을 구현할 때 자주 사용된다.
예로, 다익스트라 최단 경로 알고리즘처럼 최단 경로 찾는 알고리즘의 내부에서 우선순위 큐를 이용하는데, 우선순위 큐에 한 번 들어간 값은 변경되지 않는다.
때문에 튜플로 구성하여 소스코드를 작성한다.
또한, 튜플은 리스트에 비해 상대적으로 공간 효율적이고, 원소의 성질이 서로 다를 때 주로 사용한다.
‘비용’과 ‘노드 번호’라는 서로 다른 성질 데이터를 (비용, 노드번호)의 형태로 튜플로 묶어 관리하는 것이 관례이다.
5. 사전 자료형
사전 자료형
키(Key)와 값(Value)의 쌍을 데이터로 가지는 자료형이다.
리스트나 튜플은 값을 순차적으로 저장한다는 특징이 있다.
키-값 쌍으로 구성된 데이터를 처리함에 있어서 리스트보다 훨씬 빠르게 동작한다는 점을 기억.
특정 원소 있는지 검사
‘원소 in 사전’의 형태를 사용할 수 있다.
리스트나 튜플에 대해서도 사용할 수 있는 문법이다.
1
2
3
4
5
6
7
# 예시
data = dict()
data['사과'] = 'Apple'
data['바나나'] = 'Banana'
if '사과' in data:
print("'사과'를 키로 가지는 데이터가 존재합니다.")
관련 함수
대표적으로 키와 값을 별도로 뽑아내기 위한 함수
keys() | 키 데이터만 뽑아서 리스트로 이용 |
values() | 값 데이터만 뽑아서 리스트로 이용 |
6. 집합 자료형
집합 자료형
집합은 기본적으로 리스트 혹은 문자열을 이용해서 만듬.
- 중복 허용하지 않는다.
- 순서가 없다.
리스트나 튜플은 순서가 있기에 인덱싱으로 값을 얻을 수 있지만, 사전자료형과 집합자료형은 순서가 없어서 불가능하다.
이와 더불어 집합 자료형에는 키가 존재하지 않고 값 데이터만 담는다.
1
2
3
4
5
6
7
# 집합 자료형 초기화 방법 1
data = set([1,1,2,3,4,4,5])
# {1,2,3,4,5}
# 집합 자료형 초기화 방법 2
data = {1,1,2,3,4,4,5}
# {1,2,3,4,5}
연산, 함수
연산
| | 합집합 | print(a | b) |
& | 교집합 | print(a & b) |
- | 차집합 | print(a - b) |
함수
add() | 원소추가 | data.add(4) |
update() | 여러 원소추가 | data.update([5,6]) |
remove() | 특정값 원소 삭제 | data.remove(3) |
참고
“이것이 취업을 위한 코딩테스트다 with 파이썬” - (한빛미디어, 나동빈 지음)
- 자료 주소: http://www.hanbit.co.kr/src/10307/
- 저자 깃허브 주소: http://github.com/ndb796
- 동영상 주소: http://youtube.com/user/HanbitMedia93