1강: 수 자료형
자료형: 정수형, 실수형, 복소수형, 문자열, 리스트, 튜플, 사전 등
- 정수형(Integer): 정수를 다루는 자료형/ 양의 정수, 음의 정수, 0
- 실수형(Real Number): 소수점 아래의 데이터를 포함하는 수 자료형
- 변수에 소수점을 붙인 수 대입 -> 실수형 변수로 처리
- 소수부 0/정수부 0인 소수: 0 생략 O
지수 표현 방식
유효숫자e^지수 = 유효숫자 *10^지수
- e or E 이용한 지수 표현 방식 이용
- e or E 다음에 오는 수는 10의 지수부 의미
- ex. 1e9 -> 10의 9제곱(1,000,000,000)
- 임의의 큰 수 표현하기 위해 사용
- 최단 경로 알고리즘: 도달할 수 X 노드에 대하여 최단 거리 -> 무한(`INF`)로 설정
- 가능한 최대값이 10억 미만 -> 무한(`INF`) 값으로 1e9 이용 가능
오늘날 가장 널리 쓰이는 IEEE754 표준: 실수형 저장
-> 4바이트 or 8바이트의 고정된 크기의 메모리 할당
=> 컴퓨터 시스템은 실수 정보 표현하는 정확도 한계
ex. 10진수 체계: 0.3 + 0.6 = 0.9
But, 2진수: 0.9 정확히 표현할 수 있는 방법 X
-> 컴퓨터 최대한 0.9와 가깝게 표현하지만, 미세한 오차 발생
개발 과정에서 실수 값 제대로 비교 X -> 원하는 결과 얻지 못할 수 있음
-> `round()` 함수 권장
ex. 123.456 소수 셋째 자리에서 반올림 -> round(123.456, 2) => 123.46
연산
- 나누기 연산자: /
- 나눠진 결과를 실수형으로 반환
- ex. 7 / 3 = 2.333333
- 나머지 연산자: %
- ex. a가 홀수인지 체크해야 하는 경우
- ex. 7 % 3 = 1
- 몫 연산자: //
- ex. 7 // 3 = 2
- 거듭 제곱 연산자: **
- ex. 5 ** 3 = 125
2강: 리스트 자료형
여러 개의 데이터를 연속적으로 담아 처리하기 위해 사용하는 자료형
- 사용자 입장에서 C or Java의 배열(Array) 기능 및 연결 리스트와 유사한 기능 지원
- C++의 STL vector와 기능적으로 유사
- 리스트 = 배열 = 테이블
리스트 초기화
- 대괄호([])안에 원소 넣어 초기화, 쉼표(,)로 원소 구분
- 비어 있는 리스트 선언 -> list() or [] 이용
- 리스트의 원소에 접근 -> 인덱스(index, 0부터 시작) 값을 괄호에 넣음
리스트의 인덱싱과 슬라이싱
- 인덱싱(Indexing): 인덱스 값 입력 -> 리스트의 특정한 원소에 접근하는 것
- 파이썬의 인덱스 값: 양의 정수, 음의 정수 모두 사용 가능
- 음의 정수 -> 원소 거꾸로 검색
- ex. `a[-1]` // 뒤에서 첫 번째 원소 출력
- 파이썬의 인덱스 값: 양의 정수, 음의 정수 모두 사용 가능
- 슬라이싱(Slicing): 연속적인 위치를 갖는 원소들을 가져와야 할 때
- 대괄호 안에 콜론(:) 넣어 시작 인덱스와 끝 인덱스 설정
- 끝 인덱스는 실제 인덱스보다 1을 크게 설정
리스트 컴프리헨션
- 리스트를 초기화하는 방법 중 하나
- 대괄호 안에 조건문과 반복문 적용 -> 리스트 초기화 가능
- ex. `array = [i for i in range(10)]` // 0 ~ 9까지 수를 포함하는 리스트
- ex. N X M 크기의 2차원 리스트 초기화
- 좋은 예시: `array = [[0] * m for _ in range(n)]`
- 잘못된 예시: `array = [[0] * m] * n`
- 전체 리스트 안에 포함된 각 리스트가 모두 같은 객체로 인식
Q: 언더바 언제 사용?
A: 반복을 수행하되 반복을 위한 변수의 값을 무시하고자 할 때 언더바(_) 자주 사용
리스트 관련 기타 메서드

3강: 문자열, 튜플 자료형
문자열 자료형
- 초기화: 큰따옴표(“) or 작은 따옴표(‘) 이용
- 문자열 안에 큰따옴표 or 작은따옴표 포함되어야 하는 경우
- 전체 문자열을 큰따옴표로 구성 -> 내부적으로 작은따옴표를 포함 가능
- 전체 문자열을 작은따옴표로 구성 -> 내부적으로 큰따옴표를 포함 가능
- 혹은 백슬래시(\) 사용 -> 큰따옴표 or 작은따옴표 원하는 만큼 포함 가능
문자열 연산
- 문자열 변수에 덧셈(+) 이용 -> 문자열 더해져 연결(Concatenate)
- 문자열 변수를 특정한 양의 정수와 곱하는 경우, 문자열이 그 값만큼 여러 번 더해짐
- 인덱싱과 슬라이싱 가능
- 특정 인덱스 값 변경 불가능(immutable)
튜플 자료형
- 리스트와 유사하지만 문법적 차이
- 한 번 선언된 값 변경 X
- 리스트: 대괄호([]) 이용, 튜플: 소괄호(()) 이용
- 리스트에 비해 상대적으로 공간 효율적
튜플 사용하면 좋은 경우
- 서로 다른 성질의 데이터 묶어서 관리해야 할 때
- 최단 경로 알고리즘: (비용, 노드 번호) 형태로 튜플 자료형 자주 사용
- 데이터의 내열을 해싱(Hashing)의 키 값으로 사용해야 할 때
- 튜플은 변경 불가능 -> 리스트와 다르게 키 값으로 사용 가능
- 리스트보다 메모리 효율적으로 사용해야 할 때
4강: 사전, 집합 자료형
사전 자료형
- 키(Key)와 값(Value)의 쌍을 데이터로 가지는 자료형
- 앞서 다루었던 리스트나 튜플이 값을 순차적으로 저장하는 것과 대비
- 키 데이터만 뽑아 리스트로 이용: `key()`
- 값 데이터만 뽑아 리스트로 이용: `values()`
- 사전 자료형
- 키와 값의 쌍 -> 데이터로 가짐/ 원하는 변경 불가능한(Immutable) 자료형 -> 키로 사용 O
- 해시 테이블(Hash Table) 이용 -> 데이터 조회/수정 O(1)
집합 자료형
중복 허용 X 순서 X
- 초기화
- 리스트 or 문자열 이용
- `set()`
- ex. `data = set([1, 1, 2, 3, 4, 4, 5])`
- `set()`
- 중괄호 ({})안에 각 원소를 콤마(,) 기준으로 구분하여 삽입
- ex. `data = {1, 1, 2, 3, 4, 4, 5}`
- 리스트 or 문자열 이용
- 데이터 조회/수정 O(1)
집합 자료형의 연산
- 합집합(A ∪ B): 집합 A에 속하거나 B에 속하는 원소로 이뤄진 집합
- ex. `print(a | b)` // or
- 교집합(A ∩ B): 집합 A에 속하고 B에 속하는 원소로 이뤄진 집합
- ex. `print(a & b)` // and
- 차집합(A - B): 집합 A의 원소 중에서 B에 속하지 않는 원소로 이뤄진 집합
- ex. `print(a - b)`
사전 자료형과 집합 자료형의 특징
- 리스트/튜플: 순서 O -> 인덱싱 ~> 자료형 값
- 사전 자료형과 집합 자료형: 순서 X -> 인덱싱 ~> 값을 얻을 수 X
- 사전의 키(Key) or 집합의 원소(Element): O(1)
5강: 기본 입출력
자주 사용되는 표준 입력 방법
- `input()`: 한 줄의 문자열 입력 받는 함수
- 빠르게 입력 받기: `sys.stdin.readline()`
- `import sys`
- 입력 후 엔터가 줄 바꿈 기호로 입력 -> `rstrip()` 함께 사용
- ex. `data = sys.stdin.readline().rstrip()` // 문자열 입력 받기
- 빠르게 입력 받기: `sys.stdin.readline()`
- ex. 공백 기준 구분된 데이터를 입력 받을 때
- `list(map(int, input().split()))`
- ex. 공백 기준 구분된 데이터 개수 많지 X
- `a, b, c = map(int, input().split())`
*`map()`: 리스트의 모든 원소에 각각 특정한 함수 적용할 때 사용
자주 사용되는 표준 출력 방법
- `print()`
- 각 변수를 콤마(,) 이용하여 띄어쓰기로 구분하여 출력 가능
- 기본적으로 출력 이후에 줄 바꿈 수행
- 줄 바꿈 원하지 X 경우: end 속성 이용
- f-string 예제
- 파이썬 3.6부터 사용 가능, 문자열 앞에 접두사 `f` 붙여 사용
- 중괄호 안에 변수명 기입 -> 간단히 문자열과 정수 함께 넣을 수 있음
- ex. `print(f”정답은 {answer}입니다.”)`
6강: 조건문
들여쓰기
- 코드의 블록(Block)을 들여쓰기(Indent)로 지정
- 파이썬 스타일 가이드라인: 4개의 공백 문자를 사용하는 것을 표준으로 설정
조건문
프로그램의 흐름을 제어하는 문법
- 기본적인 형태: `if ~ elif ~ else`
- `elif` or `else` -> 경우에 따라 사용 X
- 간소화
- 조건문에서 실행될 소스코드가 한 줄 -> 줄 바꿈 X 간략하게 표현
- 조건부 표현식(Conditional Expression): `if ~ else`문을 한 줄에 작성할 수 있도록 해줌
- 조건문 안에서 수학의 부등식 그대로 사용
- ex. `x > 0 and x < 20` == `0 < x < 20`
연산자
- 비교 연산자: 특정한 두 값 비교
- X == Y: X와 Y가 서로 같을 때 참(True)
- X != Y: X와 Y가 서로 다를 때 참(True)
- X > Y: X가 Y보다 클 때 참(True)
- X < Y: X가 Y보다 작을 때 참(True)
- X >= Y: X가 Y보다 크거나 같을 때 참(True)
- X <= Y: X가 Y보다 작거나 같을 때 참(True)
- 논리 연산자: 논리 값(`True`/`False`) 사이의 연산 수행할 때 사용
- X and Y: X와 Y가 모두 참(True)일 때 참(True)
- X or Y: X와 Y 중 하나만 참(True)이어도 참(True)
- not X: X가 거짓(False)일 때 참(True)
- 기타 연산자: 리스트, 튜플, 문자열, 딕셔너리 O
- `x in 리스트`: 리스트 안에 x가 들어가 있을 때 참(True)
- `x not in 리스트`: 문자열 안에 x가 들어가 있지 않을 때 참(True)
`pass` 키워드
아무것도 처리하고 싶지 않을 때
ex. 디버깅 과정에서 일단 조건문의 형태만 만들어 놓고 조건문을 처리하는 부분은 비워놓고 싶은 경우
7강: 반복문
특정한 소스코드를 반복적으로 실행하고자 할 때 사용하는 문법
무한 루프(Infinite Loop)
끊임없이 반복되는 반복 구문
반복문 작성한 뒤 항상 반복문 탈출할 수 있는지 확인
for문
- 특정한 변수를 이용하여 `in` 뒤에 오는 데이터(리스트, 튜플 등)에
포함되어 있는 원소를 첫 번째 인덱스부터 차례대로 하나씩 방문- `for 변수 in 리스트: 실행할 소스 코드`
- `range()`: 연속적인 값을 차례대로 순회할 때
- `range(시작값, 끝값 + 1)`
- 인자를 하나만 넣으면 자동으로 시작값 = 0
키워드
- `continue`: 반복문에서 남은 코드의 실행 건너뛰고 다음 반복 진행하고자 할 때
- `break`: 반복문을 즉시 탈출하고자 할 때
8강: 함수와 람다 표현식
함수
- 특정한 작업을 하나의 단위로 묶어 놓은 것을 의미
- 불필요한 소스코드의 반복 줄일 수 있음
- 매개변수: 함수 내부에서 사용할 변수
- 반환 값: 함수에서 처리된 결과 반환
- 종류
- 내장 함수: 파이썬이 기본적으로 제공하는 함수
- 사용자 정의 함수: 개발자가 직접 정의하여 사용할 수 있는 함수
def 함수명(매개변수):
실행할 소스코드
return 반환 값
파라미터 지정하기
파라미터의 변수를 직접 지정 O (매개변수의 순서 달라도 상관 X)
def add(a, b):
print(‘함수의 결과: ‘, a + b)
add(b = 3, a = 7)
global 키워드
해당 함수에서는 지역 변수 X 함수 바깥에 선언된 변수 바로 참조
여러 개의 반환 값
파이썬 함수는 여러 개의 반환 값 가질 수 있음
람다 표현식
- 함수를 간단하게 작성할 수 있음 = 특정한 기능을 수행하는 함수를 한 줄에 작성할 수 있음
- `print(add(3, 7))` // `add()` 사용
- `print(lambda a, b: a + b)(3, 7))` // 람다 표현식
9강: 자주 사용되는 표준 라이브러리
실전에서 유용한 표준 라이브러리
- 내장 함수: 기본 입출력 함수부터 정렬 함수까지 기본적인 함수들을 제공
- 파이썬 프로그램을 작성할 때 없어서는 안 되는 필수적인 기능을 포함하고 있음
- `itertools`: 파이썬에서 반복되는 형태의 데이터를 처리하기 위한 유용한 기능을 제공
- 순열과 조합 라이브러리
- `heapq`: 힙(Heap) 자료구조를 제공
- 일반적으로 우선순위 큐 기능을 구현하기 위해 사용
- `bisect`: 이진 탐색(Binary Search) 기능을 제공
- `collections`: 덱(deque), 카운터(Counter) 등의 유용한 자료구조를 포함
- `math: 필수적인 수학 기능을 제공
- 팩토리얼, 제곱근, 최대공약수(GCD), 삼각함수 관련 함수부터 파이(pi)와 같은 상수를 포함
- 최대 공약수: `math`의 `gcd()`
- 최소 공배수: `math`의 `lcm()`
- 팩토리얼, 제곱근, 최대공약수(GCD), 삼각함수 관련 함수부터 파이(pi)와 같은 상수를 포함
순열과 조합
모든 경우의 수를 고려해야 할 때 어떤 라이브러리를 효과적으로 사용할 수 있을까
- 순열: 서로 다른 n개에서 서로 다른 r개를 선택하여 일렬로 나열하는 것
- {‘A’, ‘B’, ‘C’}에서 3개를 선택하여 나열하는 경우: ‘ABC’, ‘ACB’, ‘BAC’, ‘BCA’, ‘CAB’, ‘CBA’
- `from itertools import permutations`
- `from itertools import product` // 중복 허용
- 조합: 서로 다른 n개에서 순서에 상관 없이 서로 다른 r개를 선택하는 것
- {‘A’, ‘B’, ‘C’}에서 순서를 고려하지 않고 2개를 뽑는 경우: ‘AB’, ‘AC’, ‘BC’from itertools import
- `from itertools import combinations`
- `combinations_with_replacement` // 중복 허용

Counter
- `collections` 라이브러리의 `Counter`: 등장 횟수를 세는 기능 제공
- 반복 가능한(iterable) 객체(ex. 리스트)가 주어졌을 때 내부의 원소가 몇 번씩 등장했는지
- `from collections import Counter`
출처
'📓 > 자료구조 | 알고리즘' 카테고리의 다른 글
| [이것이 취업을 위한 코딩 테스트다 with 파이썬] 10. 개발형 코딩 테스트 (0) | 2024.03.13 |
|---|---|
| [이것이 취업을 위한 코딩 테스트다 with 파이썬] 8. 기타 그래프 이론 (0) | 2024.03.13 |
| [이것이 취업을 위한 코딩 테스트다 with 파이썬] 7. 최단 경로 알고리즘 (0) | 2024.03.13 |
| [이것이 취업을 위한 코딩 테스트다 with 파이썬] 6. 다이나믹 프로그래밍 (0) | 2024.03.13 |
| [이것이 취업을 위한 코딩 테스트다 with 파이썬] 5. 이진 탐색 (0) | 2024.03.13 |