2025/02 53

Knuth-Morris-Pratt (KMP 알고리즘)

✅Knuth-Morris-Pratt (KMP 알고리즘) KMP(Knuth-Morris-Pratt) 알고리즘은 문자열 검색(String Matching) 알고리즘 중 하나로, 텍스트에서 특정 패턴을 효율적으로 찾을 수 있는 방법입니다.일반적인 브루트 포스(완전 탐색) 방법(O(NM))은 불필요한 비교가 많아 비효율적입니다.KMP는 접두사-접미사 배열(Prefix Table, LPS 배열) 을 활용하여 중복되는 비교를 줄여 O(N + M) 시간 복잡도로 최적화합니다.1️⃣ KMP 알고리즘이 필요한 이유문자열 검색을 수행할 때, 일반적인 브루트 포스 방식을 사용하면 최악의 경우 O(NM) 시간이 걸립니다.하지만 KMP 알고리즘을 사용하면 O(N + M) 으로 줄일 수 있습니다.✔ KMP의 핵심 아이디어패턴 내..

Python Algorithm 2025.02.18

Two Pointer (투 포인터)

✅ Two Pointer (투 포인터) 알고리즘Two Pointer(투 포인터) 알고리즘은 배열이나 리스트에서 두 개의 포인터를 사용하여 문제를 해결하는 기법입니다.이 방법은 정렬된 배열, 부분 배열, 두 배열 간의 비교 문제에서 자주 활용됩니다. 활용 예시:배열 내에서 특정 조건을 만족하는 두 개의 값 찾기부분 배열의 특정 조건 만족 여부 판단두 개의 정렬된 리스트 병합 또는 비교 1️⃣ Two Pointer 기법이 필요한 이유일반적으로 브루트 포스(완전 탐색) 를 사용하면 시간 복잡도가 높아지기 때문에 효율적인 탐색 방법이 필요합니다.Two Pointer를 사용하면 불필요한 탐색을 줄이고 O(N) 또는 O(N log N) 시간 복잡도로 최적화할 수 있습니다.✔ Two Pointer의 핵심 아이디어두 ..

Python Algorithm 2025.02.18

Sliding Window(슬라이딩 윈도우)

✅Sliding Window (슬라이딩 윈도우) 알고리즘Sliding Window(슬라이딩 윈도우) 알고리즘은 배열 또는 리스트에서 일정한 크기의 범위를 유지하면서 이동하는 기법입니다. 즉, 고정된 크기(또는 가변 크기)의 윈도우를 활용하여 데이터를 효율적으로 탐색하는 방법입니다.활용 예시:배열, 문자열의 특정 범위 내 최대/최소값 찾기연속된 부분 배열의 합 계산 (최대 또는 최소 합 등)문자열 내 패턴 찾기 (애너그램, 부분 문자열 검색 등)1️⃣ Sliding Window 기법이 필요한 이유브루트 포스(완전 탐색) 를 사용하면 모든 경우를 검사해야 하므로 시간 복잡도가 높아 비효율적입니다.하지만 Sliding Window를 사용하면 불필요한 계산을 줄이고 효율적으로 문제를 해결할 수 있습니다. ✔ S..

Python Algorithm 2025.02.18

21862. 사각형 그리기 게임

https://swexpertacademy.com/main/talk/solvingClub/problemView.do?solveclubId=AZTSyabKcE7HBINJ&contestProbId=AZFYm0OKCpEDFAVs&probBoxId=AZTYhdtaJTnHBIOK&type=USER&problemBoxTitle=99.+IM+%EB%8C%80%EB%B9%84+%EB%AC%B8%EC%A0%9C&problemBoxCnt=11 SW Expert AcademySW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!swexpertacademy.com 1️⃣ 문제 개요N × N 크기의 정수 배열이 주어짐.같은 숫자로 이루어진 가장 큰 직사각형을 찾고, 해당 직사각형의 개수를 계산해야 함.2️⃣..

Baekjoon 2025.02.17

BackTracking(백트래킹)

✅ BackTracking(백트래킹)백트래킹(Backtracking) 알고리즘은 해를 찾는 도중 '막히면' (즉, 해가 아니면) 되돌아가서 다시 해를 찾아가는 기법입니다. 즉, 가능성이 없는 경로는 미리 배제하여 탐색을 최적화하는 DFS(깊이 우선 탐색)의 변형이라고 할 수 있습니다.백트래킹 알고리즘은 다음과 같은 문제를 해결하는 데 사용됩니다:최적화(Optimization) 문제: 최적의 해를 찾는 문제결정(Decision) 문제: 특정 조건을 만족하는 해가 존재하는지 확인하는 문제 ✅ 백트래킹 vs 깊이 우선 탐색(DFS) 차이점개념깊이 우선 탐색 (DFS)백트래킹 (Backtracking)개념깊이 우선 탐색(DFS)백트래킹(BackTracking)기본 개념모든 가능한 경로를 탐색불가능한 경로를 조기..

Infix Notation & Postfix Notation (중위 & 후위 표기법)

✅ Infix Notation & Postfix Notation (중위 & 후위 표기법)표기법표현 방식예제후위변환 결과중위 표기법연산자가 피연산자 사이3 + 5 * 23 5 2 * +후위 표기법연산자가 피연산자 뒤3 5 2 * +계산 결과: 13 ✔️ 후위 표기법은 괄호 없이도 연산 순서가 명확해짐✔️ 스택을 이용하면 간단하게 구현 가능  중위 표기법 (Infix Notation)우리가 일반적으로 사용하는 수식 표현 방식연산자가 피연산자 사이에 위치예시: 3 + 5 * 2 → (5 * 2 먼저 계산) 후위 표기법 (Postfix Notation, Reverse Polish Notation - RPN)연산자가 피연산자 뒤에 위치괄호 없이 연산 순서를 명확히 표현 가능예시: 3 5 2 * + → (5 × 2..

Ternary Operator (삼항 연산자)

✅Ternary Operator (삼항 연산자)Python에서는 삼항 연산자 (Ternary Operator) 를 사용하여 한 줄로 조건문을 간결하게 표현할 수 있습니다. 이번 글에서는 삼항 연산자의 개념과 활용법을 알아보겠습니다.1️⃣ 삼항 연산자란?삼항 연산자는 if-else 조건문을 한 줄로 표현할 수 있는 방법입니다. 기본 문법:값1 if 조건 else 값2 ✅예제 코드x = 10y = 5max_value = x if x > y else y # x가 y보다 크면 x, 아니면 yprint(max_value) # 10위 코드는 다음과 동일합니다:if x > y: max_value = xelse: max_value = y  📌 삼항 연산자를 사용하면 코드가 더 간결해집니다!2️⃣ 삼항 ..

Membership & Identitiy Operators (멤버십 & 아이덴티티 연산자)

✅ Membership & Identitiy Operators (멤버십 & 아이덴티티 연산자) Python에서는 멤버십 연산자(Membership Operators) 와 아이덴티티 연산자(Identity Operators) 를 사용하여 특정 값이 존재하는지 확인하거나, 객체의 동일성을 비교할 수 있습니다. 이번 글에서는 이 두 연산자의 개념과 활용법을 알아보겠습니다. 1️⃣ 멤버십 연산자 (Membership Operators)멤버십 연산자는 값이 특정 시퀀스(리스트, 튜플, 문자열, 딕셔너리 등) 안에 존재하는지 확인할 때 사용합니다.연산자설명예제결과연산자설명예제결과in특정 값이 시퀀스 안에 있으면 True 반환3 in [1, 2, 3]Truenot in특정 값이 시퀀스 안에 없으면 True 반환5 n..

Bitwise Operators (비트 연산자)

✅Bitwise Operators(비트 연산자)Python에서는 비트 연산자 (Bitwise Operators) 를 사용하여 이진수 단위로 연산을 수행할 수 있습니다. 비트 연산자는 빠른 계산이 가능하여 최적화, 암호화, 네트워크 프로그래밍 등에서 많이 활용됩니다.1️⃣ 비트 연산자 개요연산자 설명 예제 (x=5, y=3) 결과 (2진수 연산)연산자설명예제(x=5, y=3)결과 (2진수 출력)&비트 AND5 & 30b0001 (1)| 비트 OR 5 | 30b0111 (7)^비트 XOR5 ^ 30b0110 (6)~비트 NOT~50b...1010 (-6)왼쪽 시프트5 0b1010 (10)>>오른쪽 시프트5 >> 10b0010 (2) ✅ 예제 코드x, y = 5, 3 # 5: 0b0101, 3: 0b0011..

Assignment Operators (할당 연산자)

✅Python Assignment Operators (Python 할당 연산자)Python에서는 변수에 값을 저장할 때 할당 연산자 (Assignment Operators) 를 사용합니다. 단순한 = 대입뿐만 아니라, 연산과 동시에 할당할 수 있는 다양한 연산자도 제공합니다. 1️⃣ 할당 연산자 (Assignment Operators) 개요연산자설명예제결과=값을 변수에 할당x = 10x는 10이 됨+=덧셈 후 할당x += 5 (x가 10이라면)x = 15-=뺄셈 후 할당x -= 3 (x가 15이라면)x = 12*=곱셈 후 할당x *= 2 (x가 12이라면)x = 24/=나눗셈 후 할당x /= 4 (x가 24이라면)x = 6.0//=몫 연산 후 할당x //= 2 (x가 6.0이라면)x = 3.0%=나머지 ..