파이썬 기초 문법 정리 / 코딩테스트 언어 복습

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