728x90
반응형
자료형: 정수형, 실수형, 복소수형, 문자열, 리스트, 튜플, 사전 등
1강: 수 자료형
정수형(Integer)
: 정수를 다루는 자료형
- 양의 정수, 음의 정수, 0
실수형(Real Number)
: 소수점 아래의 데이터를 포함하는 수 자료형
- 변수에 소수점을 붙인 수 대입 -> 실수형 변수로 처리
- 소수부 0 or 정수부 0인 소수 -> 0 생략하고 작성 가능
지수 표현 방식
: 유효숫자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)의 쌍을 데이터로 가지는 자료형
- 앞서 다루었던 리스트나 튜플이 값을 순차적으로 저장하는 것과 대비
- 사전 자료형: 키와 값의 쌍
-> 데이터로 가짐, 원하는 ‘변경 불가능한(Immutable) 자료형’을 키로 사용 가능 - 사전 자료형: 해시 테이블(Hash Table) 이용
-> 데이터의 조회 및 수정에 있어 O(1) 시간에 처리 가능
사전 자료형 관련 메서드
- 키와 값을 별도로 뽑아내기 위한 메서드 지원
- 키 데이터만 뽑아 리스트로 이용: key() 함수
- 값 데이터만 뽑아 리스트로 이용: values() 함수
집합 자료형
- 특징
- 중복 허용 X
- 순서 X
- 리스트 or 문자열 이용해서 초기화
- set() 함수 이용
- Ex. data = set([1, 1, 2, 3, 4, 4, 5])
- set() 함수 이용
- or 중괄호 ({})안에 각 원소를 콤마(,) 기준으로 구분하여 삽입 -> 초기화
- ex. data = {1, 1, 2, 3, 4, 4, 5}
- 데이터의 조회 및 수정에 있어 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)
- 합집합: 집합 A에 속하거나 B에 속하는 원소로 이뤄진 집합 (A ∪ B)
사전 자료형과 집합 자료형의 특징
- 리스트 or 튜플: 순서O -> 인덱싱 ~> 자료형 값 얻을 수 O
- 사전 자료형과 집합 자료형: 순서 X -> 인덱싱 ~> 값을 얻을 수 X
- 사전의 키(Key) or 집합의 원소(Element) 이용해 O(1)의 시간 복잡도로 조회
5강: 기본 입출력
- 모든 프로그램은 적절한 (약속된) 입출력 양식 가지고 있음
- 프로그램 동작의 첫 번째 단계는 데이터를 입력 받거나 생성하는 것
- ex. 학생의 성적 데이터가 주어지고, 이를 내림차순으로 정렬한 결과를 출력하는 프로그램
자주 사용되는 표준 입력 방법
- input() 함수: 한 줄의 문자열 입력 받는 함수
- map() 함수: 리스트의 모든 원소에 각각 특정한 함수 적용할 때 사용
- ex. 공백을 기준으로 구분된 데이터를 입력 받을 때는 다음과 같이 사용
- list(map(int, input().split()))
- ex. 공백을 기준으로 구분된 데이터 개수 많지 X
- a, b, c = map(int, input().split())
빠르게 입력 받기
- 사용자로부터 입력을 최대한 빠르게 받아야 하는 경우
- sys 라이브러리 -> sys.stdin.readline() 메서드 이용
- 단, 입력 후 엔터가 줄 바꿈 기호로 입력되므로 rstrip() 메서드 함께 사용
- import sys
- data = sys.stdin.readline().rstrip() // 문자열 입력 받기
자주 사용되는 표준 출력 방법
- 기본 출력: print() 함수 이용
- 각 변수를 콤마(,) 이용하여 띄어쓰기로 구분하여 출력 가능
- print()는 기본적으로 출력 이후에 줄 바꿈 수행
- 줄 바꿈 원하지 X 경우: end 속성 이용
f-string 예제
- 파이썬 3.6부터 사용 가능, 문자열 앞에 접두사 ‘f’ 붙여 사용
- 중괄호 안에 변수명 기입 -> 간단히 문자열과 정수 함께 넣을 수 있음
- ex. print(f”정답은 {answer}입니다.”)
6강: 조건문
- 프로그램의 흐름을 제어하는 문법
- 조건문 이용 -> 조건에 따라 프로그램 로직 설정 가능
들여쓰기
- 코드의 블록(Block)을 들여쓰기(Indent)로 지정
- 탭을 사용하는 쪽과 공백 문자(space)를 여러 번 사용하는 쪽으로 두 진영 있음
- 파이썬 스타일 가이드라인: 4개의 공백 문자를 사용하는 것을 표준으로 설정
조건문의 기본 형태
- 조건문의 기본적인 형태: if ~ elif ~ else
- 사용할 때 elif or else 부분은 경우에 따라 사용하지 않아도 됨
비교 연산자
- 특정한 두 값을 비교할 때 이용 가능
- 대입 연산자(=)와 같음 연산자(==)의 차이점 유의
논리 연산자
- 논리 값(True/False) 사이의 연산 수행할 때 사용
기타 연산자
- 다수의 데이터를 담는 자료형을 위해 in 연산자와 not in 연산자 제공
- 리스트, 튜플, 문자열, 딕셔너리 모두에서 사용 가능
pass 키워드
- 아무것도 처리하고 싶지 않을 때 pass 키워드 사용
- ex. 디버깅 과정에서 일단 조건문의 형태만 만들어 놓고 조건문을 처리하는 부분은 비워놓고 싶은 경우
조건문의 간소화
- 조건문에서 실행될 소스코드가 한 줄인 경우, 굳이 줄 바꿈 하지 않고도 간략하게 표현 가능
- 조건부 표현식(Conditional Expression): if ~ else문을 한 줄에 작성할 수 있도록 해줌
파이썬 조건문 내에서의 부등식
- 다른 프로그래밍 언어와 다르게 파이썬은 조건문 안에서 수학의 부등식 그대로 사용 가능
- ex. x > 0 and x < 20과 0 < x < 20은 같은 결과 반환
7강: 반복문
- 특정한 소스코드를 반복적으로 실행하고자 할 때 사용하는 문법
- while문과 for문, 어떤 것을 사용해도 상관 없음
- 다만, 코딩 테스트 실제 사용 예시 -> for문이 더 간결한 경우 ↑
무한 루프
- 무한 루프(Infinite Loop): 끊임없이 반복되는 반복 구문을 의미
- 코딩 테스트에서 무한 루프 구현할 일 거의 X
- 반복문 작성한 뒤 항상 반복문 탈출할 수 있는지 확인
for문
- 구조: 특정한 변수를 이용하여 ‘in’ 뒤에 오는 데이터(리스트, 튜플 등)에
포함되어 있는 원소를 첫 번째 인덱스부터 차례대로 하나씩 방문- for 변수 in 리스트: 실행할 소스 코드
- 연속적인 값을 차례대로 순회할 때 range() 주로 사용
- range(시작값, 끝값 + 1)
- 인자를 하나만 넣으면 자동으로 시작값 = 0
continue 키워드
- 반복문에서 남은 코드의 실행 건너뛰고, 다음 반복 진행하고자 할 때 사용
break 키워드
- 반복문을 즉시 탈출하고자 할 때 break 사용
8강: 함수와 람다 표현식
함수
- 함수(Function): 특정한 작업을 하나의 단위로 묶어 놓은 것을 의미
- 함수 사용 -> 불필요한 소스코드의 반복 줄일 수 있음
종류
- 내장 함수: 파이썬이 기본적으로 제공하는 함수
- 사용자 정의 함수: 개발자가 직접 정의하여 사용할 수 있는 함수
정의하기
- 프로그램에는 똑같은 코드가 반복적으로 사용되어야 할 때 많음
- 함수 사용 -> 소스코드의 길이 줄일 수 있음
- 매개변수: 함수 내부에서 사용할 변수
- 반환 값: 함수에서 처리된 결과 반환
- def 함수명(매개변수)
실행할 소스코드
return 반환 값
파라미터 지정하기
- 파라미터의 변수를 직접 지정할 수 있음
- 이 경우 매개변수의 순서 달라도 상관 없음
- def add(a, b):
print(‘함수의 결과: ‘, a + b) - add(b = 3, a = 7)
global 키워드
- global 키워드로 변수를 지정
-> 해당 함수에서는 지역 변수를 만들지 않고, 함수 바깥에 선언된 변수를 바로 참조
여러 개의 반환 값
- 파이썬 함수는 여러 개의 반환 값 가질 수 있음
람다 표현식
- 람다 표현식을 이용하면 함수를 간단하게 작성할 수 있음
- 특정한 기능을 수행하는 함수를 한 줄에 작성할 수 있다는 점이 특징
- print(add(3, 7)) // 일반적인 add() 메서드 사용
- print(lambda a, b: a + b)(3, 7)) // 람다 표현식으로 구현한 add() 메서드
9강: 자주 사용되는 표준 라이브러리
실전에서 유용한 표준 라이브러리
- 내장 함수: 기본 입출력 함수부터 정렬 함수까지 기본적인 함수들을 제공
- 파이썬 프로그램을 작성할 때 없어서는 안 되는 필수적인 기능을 포함하고 있음
- itertools: 파이썬에서 반복되는 형태의 데이터를 처리하기 위한 유용한 기능을 제공
- 특히, 순열과 조합 라이브러리는 코딩 테스트에서 자주 사용
- heapq: 힙(Heap) 자료구조를 제공
- 일반적으로 우선순위 큐 기능을 구현하기 위해 사용
- bisect: 이진 탐색(Binary Search) 기능을 제공
- collections: 덱(deque), 카운터(Counter) 등의 유용한 자료구조를 포함
- math: 필수적인 수학 기능을 제공
- 팩토리얼, 제곱근, 최대공약수(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) 객체가 주어졌을 때 내부의 원소가 몇 번씩 등장했는지 알려줌
- from collections import Counter
최대 공약수와 최소 공배수
- 최대 공약수 -> math 라이브러리의 gcd() 함수 이용
- 최소 공배수 -> math 라이브러리의 lcm() 함수 이용
728x90
반응형
'Programming Language > Python' 카테고리의 다른 글
[점프 투 파이썬] 01장 파이썬이란 무엇인가? (0) | 2023.03.26 |
---|