파이썬 기초 문법 정리 / 코딩테스트 언어 복습
A4용지에 쓰면서 복습하면 더 기억에 잘 남습니다.
파이썬 자료형
파이썬 기본 자료형 종류
int, float, str, tuple | Immutable 객체 (변경 불가능) |
list, dict, set | Mutable 객체 (변경 가능) |
list, dict, tuple | iterable 객체 (반복 가능) |
int (정수형)
코딩테스트에서는 대부분 실수보다 정수를 다루는 문제가 출시됩니다.
수 연산 방법
# 더하기
a + b
# 빼기
a - b
# 곱하기
a * b
# 나누기 (실수형으로 처리)
a / b
# 나눈 몫
a // b
또는
int(a / b) # 정수로 변환하여 소수점 이하 삭제
# 나눈 나머지 (짝수 여부 : a % 2 == 0)
a % b
# 거듭제곱 (지수 표현)
a ** b
float (실수형)
실수에서 0은 생략할 수 있습니다. (예시 : 5. = 5.0, -.7 = -0.7)
지수 표현 방식
1e9 = 10의 9제곱 = 1,000,000,000 (10억)
최단 경로로 가능한 최댓값이 10억 미만이면 무한(INF)을 1e9로 표현할 수 있습니다.
실수 반올림 함수
round(실수, 반올림되는자릿수)
컴퓨터는 실수를 정확히 표현하지 못해 미세한 오차가 발생합니다.
코딩테스트에서는 실수 비교 시 소수점 다섯 번째 자리에서 반올림한 결과와 같으면 정답으로 인정합니다.
str (문자열 자료형)
Immutable한 str보다는 Mutable한 list에 문자들을 모으는 것이 코드 효율을 높이는 방법입니다.
문자열 연산
a = "Hello"
b = "World"
a + " " + b == "Hello World"
a * 3 == "HelloHelloHello"
문자열 함수
# 대소문자 전환
문자열.swapcase()
# 소문자 여부
문자열.islower()
# 소문자로 변환
문자열.lower()
# 대문자로 변환
문자열.upper()
List (리스트)
파이썬 리스트는 Java의 Array(배열) 또는 C++의 STL vector와 유사합니다.
중복을 허용하며, 내부적으로 값을 순차적으로 동적 배열에 저장하여 크기를 조절합니다.
리스트 초기화(선언) : O(n)
# 빈 리스트 초기화
a = list() 또는 []
# 리스트 초기화
a = [1,2]
# 크기가 5이고, 모든 값이 0인 리스트 초기화
a = [0] * 5
# a == [0, 0, 0, 0, 0]
# 리스트 컴프리헨션 (리스트 초기화 후 반복문, 조건문에 맞는 원소를 이용하여 append)
a = [i for i in range(20) if i % 2 == 1]
# 0부터 19까지 반복하고 홀수만 추출
# a == [1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
b = [i * i for i in range(1, 10)]
# 1부터 9까지 반복하며 제곱
# b == [1, 4, 9, 16, 25, 36, 49, 64, 81]
# 2차원 리스트 컴프리헨션
a = [[0] * 4 for _ in range(3)]
# _는 반복 시 변수에 담지 않는다는 뜻
# a == [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
2차원 리스트 초기화 시 리스트 컴프리헨션을 이용하면 코드가 간결해집니다.
리스트 접근 및 수정 : O(1)
# 0번째 원소에 접근 (인덱싱) 및 수정
a[0] = 변경값
# 뒤에서 첫번째 원소에 접근 (인덱싱)
a[-1]
# 연속적인 원소에 접근 (슬라이싱)
a[시작인덱스:N번째까지]
# 리스트 역순 (슬라이싱)
a[::-1]
리스트 사용법
# 리스트에 마지막 원소 추가 : O(1)
a.append(값)
# 리스트 마지막 원소 삭제 : O(1)
a.pop()
# 중간 위치에서 원소 삭제 후 순서 조정 : O(n)
a.pop(인덱스)
# 특정 값을 갖는 원소 삭제 후 순서 조정 : O(n)
a.remove(값)
# 중간 위치에 원소 삽입 후 순서 조정 : O(n)
a.insert(삽입인덱스, 값)
# 특정 값을 갖는 원소 수 : O(n)
a.count(값)
# 원소 순서를 반대로 정렬 : O(n)
a.reverse()
# 오름차순 정렬 : O(nlogn)
a.sort()
# 내림차순 정렬 : O(nlogn)
a.sort(reverse=True)
# 리스트에 원소가 있는지 확인 : O(n)
if "사과" in a:
print("사과 있음")
# 값을 받으며 리스트 반복
for v in a:
print(v)
# 인덱스, 값을 받으며 리스트 반복
for i, v in enumerate(리스트, 시작인덱스):
print(i, v)
# 리스트에서 값이 맨 처음 등장한 인덱스 반환 (값이 없으면 에러나니까 주의)
a.index(값)
# 리스트의 값을 다른 리스트에 복사
리스트2 = 리스트1.copy()
리스트 정렬 시 정렬된 값으로 바로 변경됩니다.
Dictionary (사전)
파이썬 사전은 Java의 HashMap과 유사하며, 키 중복을 허용하지 않고 순서가 없습니다.
내부적으로 해시 테이블 자료구조여서 검색, 수정 시 시간복잡도는 O(1)으로 리스트보다 빠릅니다.
사전 초기화(선언)
# 빈 사전 초기화
a = dict() 또는 {}
# 사전 초기화
a = {"사과":"Apple", "바나나": "Banana"}
b = dict("사과":"Apple", "바나나": "Banana")
사전 접근 및 수정
# 원소에 접근 및 수정 or 원소 추가
a["키"] = "값"
사전 사용법
# 사전에 원소가 있는지 확인 : O(1)
if "사과" in a:
print("사과 있음")
# 사전의 키 리스트
key_list = a.keys()
# 사전의 값 리스트
val_list = a.values()
# 사전의 키 리스트 값으로 반복하여 사전 값 출력
for key in key_list:
print(a[key])
# 또는 a.get(key)
# 사전의 (키, 값) 튜플로 이루어진 리스트 반환
a.items()
# [("사과", "Apple"), ("바나나", "Banana")]
# 사전의 키, 값을 바쭤서 저장
a = {v:k for k,v in a.items()}
Tuple (튜플)
파이썬 튜플은 리스트에 비해 공간 효율적이고, 순서가 있는 자료형입니다.
값을 변경할 수 없어서, 주로 변경하면 안 되는 서로 다른 성질의 데이터를 튜플로 관리합니다.
다익스트라 알고리즘에서 최단 경로를 찾을 때 우선순위 큐에 들어가는 데이터도 튜플로 구성합니다.
튜플 초기화(선언)
# 빈 튜플 초기화
a = tuple()
# 튜플 초기화
a = (1,2,3)
튜플 접근
# 원소에 접근
a[0]
Set (집합)
파이썬 집합은 리스트 or 문자열으로 만들 수 있으며, 중복을 허용하지 않습니다.
해시 테이블과 원리가 같으나 키 없이 값 데이터만을 저장하며, 순서가 없어서 인덱싱으로 값을 얻을 수 없습니다.
특정 원소가 있는지 확인 시 시간복잡도는 O(1)으로, 데이터 등장 여부를 확인할 때 효과적입니다.
집합 초기화(선언)
# 빈 집합 초기화
a = set()
# 리스트로 집합 초기화
a = set(리스트)
# 집합 초기화
a = set([1, 2, 3, 4, 5])
b = {1, 1, 2, 3, 4, 4, 5}
# b == {1, 2, 3, 4, 5}
# 같은 데이터를 넣으면 1개만 저장됩니다.
# 리스트의 최소값부터 최대값 전까지의 range 객체를 집합으로 생성
sets = [set(range(min(l), max(l))) for l in lines]
집합 사용법
# 두 집합의 교집합
a & b
# 두 집합의 합집합
a | b
# 두 집합의 차집합
a - b
# 집합에 원소 1개 추가 : O(1)
a.add("값")
# 집합에 iterable 객체의 원소 여러개 추가
a.update(["값1", "값2"])
# set은 중복을 허용하지 않아서, 이미 있는 요소를 추가하려고 하면 무시됩니다.
# 특정 값을 갖는 원소 삭제 : O(1)
a.remove("값")
# 리스트에서 집합에 속한 값 삭제
list = [1, 2, 3, 4, 5, 5, 5]
remove_set = {3, 5}
result = [i for i in list if i not in remove_set]
# result == [1, 2, 4]
# 집합에 원소가 있는지 확인 : O(1)
if "사과" in a:
print("사과 있음")
파이썬 조건문
조건문 문법
if 조건문1:
# 조건문1 True이면 실행
pass # 나중에 작성 예정인 경우
elif 조건문2:
# 조건문2 True이면 실행
else:
# 조건문1, 조건문2 모두 false이면 실행
조건부 표현식
"Success" if 조건문 else "fail"
파이썬 연산자
비교 연산자
# 서로 같으면 True
a == b
# 서로 다르면 True
a != b
# a가 b보다 크거나 같으면 True
a >= b
# a가 b보다 작거나 같으면 True
a <= b
논리 연산자
# 모두 True이면 True
a and b
# 하나만 True여도 True
a or b
# a가 False이면 True
not a
기타 연산자
# a에 값이 있으면 True
"값" in a
# a에 값이 없으면 True
"값" not in a
파이썬 반복문
while문
# i가 9보다 작거나 같을 때 반복
while i <= 9:
# i가 홀수일 때만 더해줌
if i % 2 == 1:
result += 1
i += 1
for문
# 0부터 19까지 반복
for i in range(20):
# 1부터 9까지 반복
for i in range(1, 10):
# 리스트 원소를 0번째부터 변수에 담으며 반복
for 변수 in 리스트:
# 조건에 맞으면 실행하지 않고 다음 반복으로 건너띄고 싶은 경우
for i in range(5):
if 조건문:
continue
# 실행코드
# 조건에 맞으면 현재 for문 전체를 종료하고 싶은 경우
for i in range(5):
if 조건문:
break
# 중첩 for문에서 안쪽 for문을 종료한 경우, 바깥쪽 for문은 계속 실행됩니다.
중첩 for문
for i in range(2, 10):
for j in range(1, 10):
print(i, "x", j, "=", i * j)
print()
파이썬 함수 및 라이브러리 사용법
https://0songha0.github.io/python/2023-02-15-1
파이썬 자료구조 구현 방법
https://0songha0.github.io/python/2023-11-21-1
초보자를 위한 파이썬 300제
https://wikidocs.net/7014
위키독스에서 유용한 프로그래밍 책들을 무료로 볼 수 있습니다.
파이썬 소스코드 저장소
https://github.com/ndb796/Python-Competitive-Programming-Team-Notes
Leave a comment