알고리즘을 파이썬으로 준비하려는 개발자들에게 도움이 될 만한 필수 개념을 정리해보려고 합니다.
저처럼 주 언어는 Java이지만 코딩 테스트는 Python으로 준비하는 개발자들에게 조금이나마 도움이 되고자
중간에 Java 개념과 비슷하거나 다른게 있으면 적어놨으니 같이 참고해주세요
만약 자바 개발자가 아니라면 해당 부분은 가볍게 넘어가주시면 됩니다.
알고리즘을 풀기 전에 한 번 훑어보면서 개념을 정리하고 같이 코딩 테스트를 준비해봐요 !! 파이팅 !!
1. 기본 문법
변수 선언
x = 10 # 타입 지정 없음
name = "Dengju"
- 파이썬은 변수 선언 시 타입을 명시하지 않아도 된다
- 자바처럼 int, String 등을 사용하지 않는다
조건문
if x > 5:
print("x is greater than 5")
elif x == 5:
print("x is 5")
else:
print("x is less than 5")
- 콜론과 들여쓰기로 블록 구분
- else if 대신 elif 사용
2. 반복문
for문
범위 반복
for i in range(5): # 0부터 4까지
print(i)
- range(n) : 0부터 n-1까지의 숫자 생성
while문
count = 0
while count < 5:
print(count)
count += 1
- 조건이 참일 때까지 반복
- 자바와 비슷하지만, 세미콜론 대신 콜론 사용
3. 함수
def add(a, b):
return a + b
print(add(2, 3))
- def 키워드로 함수 선언
- 함수 인자와 반환 타입을 명시하지 않음
4. 리스트
자바의 ArrayList와 비슷
nums = [1, 2, 3, 4]
nums.append(5) # 요소 추가
nums.remove(3) # 요소 제거
print(nums[1]) # 인덱스 접근
print(len(nums)) # 길이 확인
- 인덱스 접근과 슬라이싱 지원
print(nums[1:3]) # [2, 3]
- 리스트 내포 (List Comprehension)
squares = [x * x for x in range(5)]
print(squares) # [0, 1, 4, 9, 16]
5. 딕셔너리
자바의 HashMap과 비슷
cat = {"name": "coco", "age" 3}
print(cat[name]) # coco
cat["age"] = 2 # 값 수정
cat["color"] = "black" # 값 추가
- 키-값 쌍으로 데이터 저장
- 중복 키가 불가능하고, 값은 자유롭게 수정 가능
6. 집합 (Set)
nums = {1, 2, 3}
nums.add(4) # 추가
nums.remove(2) # 제거
print(nums) # {1, 3, 4}
- 중복을 허용하지 않음
- add, remove, union, intersection 등을 사용할 수 있음
7. 튜플
변경 불가능한 리스트
point = (2, 3)
print(point[0]) # 2
- 한 번 선언하면 값을 변경할 수 없다
- 메모리 효율이 좋고, 함수의 복수 반환 값으로 많이 사용된다
8. 스택 (Stack)
- LIFO (Last in, First Out) : 마지막에 들어온 데이터가 먼저 나간다
stack = []
stack.append(1) # 스택에 데이터 추가 (push)
stack.append(2)
print(stack.pop()) # 2 (스택에서 데이터 제거 및 반환)
print(stack) # [1]
- 리스트를 사용하므로, pop()은 O(1)이나, 중간 삽입/삭제는 O(n)
- 스택이 비어있을 때 pop()을 호출하면 IndexError 발생
- 활용 예시: 괄호 검증, DFS, 백트래킹 등
9. 큐 (Queue)
- FIFO (First In, First Out) : 먼저 들어온 데이터가 먼저 나간다
- put(x) : 큐에 데이터 추가 (enqueue)
- get() : 큐에서 데이터 제거 및 반환 (dequeue)
from collections import deque
queue = deque()
queue.append(1)
queue.append(2)
print(queue.popleft()) # 1
print(queue) # deque([2])
- 파이썬 리스트를 큐로 사용하면 비효율적이므로 deque를 사용해야 O(1) 성능 보장
- 활용 예시: BFS, 캐시 구현, 프로세스 관리 등
10. 덱 (Deque)
- 양쪽 끝에서 삽입과 삭제가 모두 가능
- append(x) : 오른쪽 끝에 추가
- appendleft(x) : 왼쪽 끝에 추가
- pop() : 오른쪽 끝에서 제거 및 반환
- popleft() : 왼쪽 끝에서 제거 및 반환
from collections from deque
dq = deque([1, 2, 3])
dq.appendleft(0) # [0, 1, 2, 3]
dq.append(4) # [0, 1, 2, 3, 4]
dq.pop() # [0, 1, 2, 3]
dq.popleft() # [1, 2, 3]
- 활용 예시: 슬라이딩 윈도우, 회전 큐
11. 기타 유용한 자료 구조
- Counter (빈도 수 계산)
from collections import Counter
nums = [1, 2, 2, 3, 3, 3]
count = Counter(nums)
print(count) # Counter({3: 3, 2: 2, 1: 1})
- OrderedDict (순서가 있는 딕셔너리)
from collections import OrderedDict
od = OrderedDict()
od['a'] = 1
od['b'] = 2
print(od) # OrderedDict([('a', 1), ('b', 2)])
- defaultdict (기본값이 있는 딕셔너리)
from collections import defaultdict
dd = defaultdict(int) # 기본값 0
dd['a'] += 1
print(dd['a']) # 1
12. 입출력
입력
n = int(input()) # 정수 입력
nums = list(map(int, input().split())) # 공백으로 구분된 정수 입력
출력
print("Hello, World!")
print(f"Sum: {5 + 3}") # f-string 사용
- f-string으로 자바의 String.format처럼 사용할 수 있음
13. 정렬
arr = [3, 1, 4, 1, 5]
arr.sort() # 오름차순 정렬
arr.sort(reverse=True) # 내림차순 정렬
arr = sorted(arr) # 정렬 후 새로운 리스트 반환
- sort()는 제자리 정렬, sorted()는 새로운 리스트 반환
- 정렬 기준 설정 가능
arr.sort(key=lamda x: -x) # 내림차순
14. 자주 쓰이는 함수
- sum(arr) : 리스트 합계
- min(arr), max(arr) : 최소값, 최대값
- abs(x) : 절대값
- enumerate(arr) : 인덱스와 값을 함께 가져옴
- zip(list1, list2) : 두 리스트를 묶어서 튜플로 반환
- map(func, iterable) : 모든 요소에 함수를 적용
'Python > 알고리즘' 카테고리의 다른 글
[Python] 파이썬으로 입력, 출력, 데이터 세팅하기 (0) | 2025.04.06 |
---|