수학과 데이터 구조, 그리고 알고리즘의 모든 것
프로그래밍을 시작할 때 코드를 작성하는 문법만큼이나 중요한 것이 바로 데이터를 수학적으로 다루고 효율적으로 조직하는 방법을 익히는 것입니다. 본 가이드에서는 코딩의 근간이 되는 사칙연산과 변수 개념부터, 리스트·딕셔너리, 스택과 큐, 그리고 개발자를 위한 필수 수학 및 알고리즘까지 체계적으로 정리해 드립니다.
1. 기본 연산과 비교 연산
프로그래밍에서 숫자 계산과 논리적 판단은 필수적인 요소입니다.
사칙연산 및 나머지 연산 (%)
기본 연산:
+(더하기),-(빼기),*(곱하기),/(나누기)나머지 연산 (
%): 나누고 남은 값을 반환하며, 반복 패턴이나 짝수/홀수 판별에 자주 쓰입니다.7 % 3 = 1(3으로 나눈 나머지 1)10 % 2 = 0(나머지가 0이면 짝수)11 % 2 = 1(나머지가 1이면 홀수)
비교 연산 (>, <, ==, !=)
두 값을 비교하여 참(True) 또는 거짓(False) 결과를 반환합니다.
>(크다),<(작다),==(같다),!=(같지 않다)활용 예: 로그인 시 입력한 비밀번호와 저장된 비밀번호가 같은지(
==) 체크할 때 사용합니다.
2. 좌표계(X, Y)와 기본 통계 계산
2.1 좌표계 (X, Y) 이해
컴퓨터 그래픽이나 게임은 좌표로 화면을 표현합니다. 2차원 좌표 (X, Y)는 시스템에 따라 기준이 다를 수 있습니다.
웹 화면 해상도 예시 (1920×1080):
(0, 0)= 왼쪽 위(1920, 1080)= 오른쪽 아래
활용 예: 캐릭터 위치 이동 시
(x, y)에서(x+10, y)로 지정하면 오른쪽으로 10칸 이동합니다.
2.2 평균·최댓값·최솟값 계산
데이터 집합에서 가장 많이 사용하는 기본 연산입니다.
평균: 합계 ÷ 개수
최댓값 / 최솟값: 데이터 중 가장 큰 값과 가장 작은 값
예시: 점수
[70, 80, 90, 100]인 경우 평균은85, 최댓값은100, 최솟값은70이 됩니다.
3. 변수와 배열(Array), 리스트·딕셔너리 구조
변수 (Variables)
변수는 데이터가 들어있는 상자(RAM 메모리 영역에 있는 값)로 이해할 수 있습니다. 이름을 붙여 저장하고 필요할 때 꺼내 씁니다.
예시:
이름 = "철수",나이 = 20
배열과 리스트·딕셔너리
배열 (Array): 같은 종류의 데이터를 순서대로 나열한 것으로, 각각의 위치를 인덱스(0부터 시작)로 접근합니다.
리스트 (List): 순서가 있는 데이터 모음으로 다양한 자료형을 함께 저장할 수 있습니다. (예:
["철수", "영희", "민수"])딕셔너리 (Dictionary / Map): 키(Key)와 값(Value) 형태로 데이터를 저장하며, 순서 대신 이름표(Key)로 접근합니다. (예수:
{"이름": "철수", "나이": 20})
4. 선형 자료구조: 스택(Stack)과 큐(Queue)
스택과 큐는 데이터를 순서대로 저장하고 접근하는 대표적인 선형 자료구조입니다.
스택 (Stack) – LIFO
구조: 선입후출(LIFO: Last-In, First-Out) 구조로, 가장 나중에 들어온 데이터가 가장 먼저 나옵니다 (접시 쌓기와 유사).
주요 연산: 데이터 추가는
Push, 제거는Pop을 사용합니다.활용: 웹 브라우저의 ‘뒤로 가기’, 함수 호출 스택 등.

큐 (Queue) – FIFO
구조: 선입선출(FIFO: First-In, First-Out) 구조로, 가장 먼저 들어온 데이터가 가장 먼저 나옵니다 (은행 창구 줄서기와 유사).
주요 연산: 데이터 추가는
Enqueue(삽입), 제거는Dequeue(삭제)를 사용합니다.활용: 운영체제의 작업 스케줄링, 인쇄 작업 대기열 등.

5. 개발자를 위한 필수 수학
모든 개발자에게 필요한 기본 수학
논리학: 참(
True)과 거짓(False)을 다루며 조건문(if,and,or,not)의 기반이 됩니다.이산수학: 셀 수 있는 유한한 대상을 다루며 컴퓨터 과학의 뼈대가 됩니다.
집합론: 데이터 집합(Set), 교집합, 합집합 등을 이해하는 데 필수적입니다.
그래프 이론: 소셜 네트워크나 길 찾기 알고리즘 등 데이터 간의 연결을 모델링합니다.
조합론 및 대수학: 경우의 수 계산, 알고리즘 복잡도 분석, 변수와 함수 다루기에 쓰입니다.
특정 분야에 필요한 고급 수학
인공지능(AI) & 머신러닝: 선형대수학(행렬과 벡터), 통계학 및 확률론, 미적분학(경사 하강법 최적화).
게임 개발 & 컴퓨터 그래픽스: 기하학(3D 모델링), 선형대수학(좌표 변환), 삼각함수(물체의 자연스러운 움직임).
보안 & 암호학: 정수론(공개 키 암호화 방식 RSA 등).
6. 알고리즘의 개념과 파이썬 예시 코드
알고리즘은 특정 문제를 해결하기 위한 일련의 명확하고 단계적인 절차나 규칙입니다.
알고리즘의 5대 구성 요소
입력 (Input): 문제를 해결하기 위해 받는 데이터.
출력 (Output): 데이터를 처리한 후의 결과.
명확성 (Definiteness): 각 단계가 모호하지 않아야 함.
유한성 (Finiteness): 반드시 유한한 시간 내에 끝나야 함.
효율성 (Efficiency): 더 빠르고 자원을 적게 사용할수록 좋은 알고리즘임.
주요 알고리즘 유형
정렬 (Sorting): 데이터를 순서대로 배열 (예: 버블 정렬, 퀵 정렬)
탐색 (Searching): 특정 데이터를 찾음 (예: 이진 탐색, 선형 탐색)
그래프 (Graph): 최단 경로 탐색 (예: 다익스트라, 너비 우선 탐색)
파이썬 선형 탐색(Linear Search) 구현 예시
리스트의 처음부터 끝까지 순차적으로 요소를 확인하여 목표 값을 찾는 가장 기본적인 탐색 알고리즘입니다.
def linear_search(arr, target):
"""
주어진 리스트(arr)에서 목표 값(target)을 찾는 선형 탐색 알고리즘
"""
for i in range(len(arr)):
if arr[i] == target:
return i # 목표 값을 찾으면 해당 인덱스 반환
return -1 # 목표 값을 찾지 못하면 -1 반환
# 예제 사용
my_list = [2, 5, 8, 12, 16, 23, 38, 56, 72]
target_value = 23
result = linear_search(my_list, target_value)
if result != -1:
print(f"목표 값 {target_value}는 인덱스 {result}에 있습니다.")
else:
print(f"목표 값 {target_value}를 찾을 수 없습니다.")