Stay Hungry Stay Foolish

알고리즘 22

[Algorithm] 최소 힙(Min Heap)

최소 힙 최소 힙(Min Heap)은 이진 트리 형태의 자료구조로, 부모 노드의 값이 항상 자식 노드의 값보다 작거나 같은 특성을 갖는 구조이다. O(logn)의 시간 복잡도로 삽입/삭제 가능작은 값을 효율적으로 관리 가능특정 값 삭제, 임의 인덱스 접근이 비효율적. O(n)이 소요됨특징부모 ≤ 자식모든 부모 노드의 값은 자식 노드의 값보다 작거나 같다.가장 작은 값이 루트 노드에 위치.완전 이진 트리트리의 모든 레벨이 꽉 차 있으며, 마지막 레벨은 왼쪽부터 채워져야 함.활용최소 힙은 최솟값을 효율적으로 찾거나 관리해야 하는 상황에서 유용하다.우선순위 큐 구현정렬되지 않은 데이터에서 최솟값 추출데이터 스트림에서 k번째 작은 값 유지 연산삽입 O(log⁡n) 새 데이터를 트리의 가장 아래(왼쪽부터 채움)에..

알고리즘 2024.11.16

[Algorithm] Two-Pointers(투 포인터)

투 포인터배열이나 리스트를 탐색할 때, 두 개의 포인터를 사용하여 효율적으로 문제를 해결하는 알고리즘 기법이다. 주로 정렬된 배열에서 특정 조건을 만족하는 값을 찾거나, 구간 합을 계산하는 문제 등에 사용된다.효율적 : 정렬된 배열에서 탐색 시 O(n) 으로 해결 가능간단한 구현 : 포인터 이동만으로 문제 해결 투 포인터 개념포인터(Pointer) : 배열의 특정 인덱스를 가리키는 변수두 개의 포인터를 배열의 양 끝 또는 특정 시작점과 끝점에 두고, 포인터를 이동시키며 문제를 해결 사용 조건배열이 정렬된 경우가 많을 때특정 구간이나 두 값의 합을 계산할 때 효율적으로 탐색할 필요가 있을 때 대표적인 동작 방식시작과 끝 포인터 사용 (양 끝에서 이동)배열의 가장 왼쪽과 오른쪽 끝에 포인터를 둔 뒤, 조건에..

알고리즘 2024.11.15

[파이썬] 이진법, 이진수, 2진수 변환 방법

이진법 변환 방법 1️⃣ bin() 함수 사용bin() 함수는 숫자를 2진법 문자열로 변환하여 반환n = 5binary_str = bin(n) # 결과: '0b101' 2️⃣ format() 함수 사용format() 함수의 'b' 포맷 코드를 사용하여 2진법 문자열을 얻을 수 있다.n = 5binary_str = format(n, 'b') # 결과: '101' 3️⃣ f-string을 사용한 포맷팅f-string 안에서도 :b를 붙여서 2진법으로 출력할 수 있다.n = 5binary_str = f"{n:b}" # 결과: '101' 4️⃣ bin() 함수 + 슬라이싱bin() 함수의 결과에서 접두사 '0b'를 제거하기 위해 슬라이싱을 사용할 수 있다.n = 5binary_str = bin(n)[2:]..

알고리즘 2024.11.15

[파이썬] 순열(Permutations) 과 조합(Combinations)

permutations (순열) 파이썬의 permutations 함수는 순열을 생성하여, 주어진 순서로 뽑을 수 있는 모든 경우의 수를 구한다. 순서가 중요한 경우에 사용된다. itertools 모듈에 포함되어 있어 사용 전에 이 모듈을 임포트해야 한다.  기본 구문from itertools import permutationspermutations(iterable, r)iterable : 순열을 생성할 대상 (리스트, 문자열 등).r : 순열의 길이 (뽑을 개수). r을 생략하면 기본값은 len(iterable)로 설정된다. 사용 방법 1️⃣ 기본 사용from itertools import permutationsitems = ['a', 'b', 'c']perm = permutations(items, 2)..

알고리즘 2024.11.06

[파이썬] lambda(람다) 함수

lambda 함수 파이썬의 lambda 함수는 익명 함수를 생성할 수 있는 기능이다. lambda를 사용하면, def 키워드를 사용하지 않고도 간단한 함수를 만들 수 있다. 주로 짧고 간단한 함수가 필요할 때 사용된다.  기본 구문lambda 인자1, 인자2, ... : 표현식lambda : 키워드인자 : 입력 인자표현식 : 함수가 반환할 값 (하나의 표현식만 가능) 사용 방법 1️⃣ 기본 사용법# 두 수의 합을 계산하는 lambda 함수add = lambda x, y: x + yresult = add(5, 3)print(result) # 출력: 8 lambda x, y: x + y는 두 개의 인자를 받아 합을 계산하는 함수이다.  2️⃣ 리스트 정렬에 사용lambda 함수는 종종 정렬이나 필터링과 같..

알고리즘 2024.10.30

[파이썬] enumerate() 함수

enumerate()enumerate() 함수는 반복문을 사용할 때 인덱스와 요소를 함께 반환해주는 함수이다. 주로 리스트나 튜플 등 이터러블을 반복할 때, 인덱스와 요소를 동시에 다루기 위해 사용된다. 기본 구문enumerate(iterable, start=0) iterable : 인덱스와 함께 반환할 대상(예: 리스트, 튜플, 문자열 등).start : 인덱스를 시작할 값 (기본값은 0). 사용 방법1️⃣ 리스트에서 인덱스와 요소 동시에 사용하기fruits = ["apple", "banana", "cherry"]for index, fruit in enumerate(fruits): print(index, fruit)  출력 결과0 apple1 banana2 cherry enumerate()는 fr..

알고리즘 2024.10.29

[파이썬] set, 집합 함수

set(집합) set 는 중복을 허용하지 않는 변경 가능한 데이터 구조로, 수학에서의 집합과 유사한 개념을 제공한다. 순서가 없고, 각 요소는 고유해야 하며, 요소 간의 빠른 검색, 추가, 삭제를 지원한다. 데이터의 고유성을 보장하고, 중복된 값을 처리하거나 집합 연산이 필요한 경우에 유용하게 사용된다.  set의 주요 특징중복 허용 안함 : 한 집합 내에서 동일한 값이 중복될 수 없다.순서 없음 : 저장된 순서가 유지되지 않으며, 요소를 인덱스로 접근할 수 없다.변경 가능 : 집합은 새로운 요소를 추가하거나 삭제할 수 있다.빠른 연산 : 해시 테이블 기반으로, 원소의 추가/제거/검색이 평균적으로 매우 빠르다. set 생성 방법1️⃣ 방법 1 : 중괄호 {}를 사용my_set = {1, 2, 3, 4, ..

알고리즘 2024.10.29

[파이썬] zip() 함수

zip()파이썬의 zip() 함수는 여러 이터러블(iterable)(리스트, 튜플 등)을 동시에 순회하면서, 각 이터러블의 동일한 인덱스에 있는 요소들을 튜플로 묶어 반환하는 함수이다. 즉, 여러 시퀀스의 요소들을 하나씩 차례대로 짝지어준다.  zip() 기본 구문zip(iterable1, iterable2, ...) 입력 : 여러 개의 이터러블 객체 (예: 리스트, 튜플 등).출력 : 각 이터러블의 요소들을 묶은 튜플로 이루어진 이터레이터. 사용 방법1️⃣ 리스트 두 개를 묶기list1 = [1, 2, 3]list2 = ['a', 'b', 'c']zipped = zip(list1, list2)print(list(zipped)) 출력 결과[(1, 'a'), (2, 'b'), (3, 'c')]리스트 lis..

알고리즘 2024.10.25

[파이썬] 딕셔너리(Dictionary), dict()

Dictionary파이썬의 딕셔너리(dictionary)는 키-값 쌍으로 데이터를 저장하는 변경 가능한(mutable) 자료 구조이다. 딕셔너리는 해시 테이블 기반으로 구현되어 있어, 키를 통해 값을 빠르게 검색, 추가, 삭제할 수 있다. 각 키는 유일해야 하며, 값은 중복될 수 있다. 특징키-값 쌍 : 데이터를 키(key)와 값(value) 형태로 저장한다.변경 가능 : 딕셔너리에 새로운 키-값을 추가하거나 기존 값을 변경할 수 있다.빠른 조회 : 키를 사용해 값을 빠르게 조회할 수 있다.순서 보장 : 파이썬 3.7부터 삽입한 순서대로 항목을 유지한다. 딕셔너리 생성 방법딕셔너리는 중괄호 { }를 사용하거나 dict() 함수를 이용해 생성할 수 있다. 1️⃣ 중괄호{ } 사용my_dict = { ..

알고리즘 2024.10.25

[파이썬] set() (집합 함수)

set()파이썬의 set(집합)은 중복을 허용하지 않는 변경 가능한 데이터 구조로, 수학에서의 집합과 유사한 개념을 제공합니다. 순서가 없고, 각 요소는 고유해야 하며, 요소 간의 빠른 검색, 추가, 삭제를 지원합니다. set의 주요 특징중복 허용 안함: 한 집합 내에서 동일한 값이 중복될 수 없습니다.순서 없음: 저장된 순서가 유지되지 않으며, 요소를 인덱스로 접근할 수 없습니다.변경 가능: 집합은 새로운 요소를 추가하거나 삭제할 수 있습니다.빠른 연산: 해시 테이블 기반으로, 원소의 추가/제거/검색이 평균적으로 매우 빠릅니다. set 생성하는 법중괄호 {}를 사용하거나 set() 함수를 사용하여 집합을 생성합니다.# 방법 1: 중괄호 사용my_set = {1, 2, 3, 4, 5}# 방법 2: set..

알고리즘 2024.10.24

[파이썬] replace() 메서드

replace() 메서드문자열의 특정 부분을 다른 문자열로 교체하는 메서드이다. 원본 문자열을 변경하지 않고, 변경된 새로운 문자열을 반환한다. 문자열을 수정하거나 변형할 때 유용하게 사용된다. 📌 문자열은 불변 객체새로운 문자열을 반환한다는 것은, 문자열이 불변 객체이므로 원본 문자열은 변경되지 않는다는 것을 말한다.  기본 구문string.replace(old, new[, count])old : 교체할 부분 문자열.new : 대체할 문자열.count : 생략 가능, 교체할 횟수(지정하지 않으면 모든 old를 교체).  1️⃣ 예시 1 : 모든 부분 문자열 교체text = "apple banana apple"new_text = text.replace("apple", "orange")print(new_..

알고리즘 2024.10.22

[파이썬] 자료 구조 - deque

deque 이란?deque(덱)는 파이썬의 collections 모듈에서 제공하는 양방향 큐로, 리스트와 유사하지만 양쪽 끝에서 빠른 삽입과 삭제가 가능하다. 리스트와 비교해 시간 복잡도가 더 효율적이기 때문에, 양쪽에서 데이터를 자주 추가하거나 제거하는 경우 deque를 사용하는 것이 좋다. deque 사용법먼저 collections 모듈에서 deque를 import한다.from collections import deque  1️⃣ 1. deque 생성dq = deque([1, 2, 3, 4, 5]) print(dq) 출력 결과deque([1, 2, 3, 4, 5])  2️⃣ 2. 요소 추가오른쪽 끝에 요소 추가: append()왼쪽 끝에 요소 추가: appendleft()dq.append(6) ..

알고리즘 2024.10.21

[파이썬] 리스트 컴프리헨션

리스트 컴프리헨션 (List Comprehension) 파이썬에서 간결하고 효율적으로 리스트를 생성하는 구문이다. 기존 리스트의 값을 조건에 따라 변형하거나 필터링하여 새로운 리스트를 만들 때 매우 유용하다. 리스트를 생성하는 for 루프를 한 줄로 작성할 수 있어, 코드가 짧고 가독성이 높아진다.  기본 구문[expression for item in iterable if condition] expression: 리스트에 포함될 값이나 변형된 값item: iterable의 각 요소를 나타냄iterable: 반복 가능한 객체 (예: 리스트, 문자열, 튜플 등)condition (선택적): 각 요소에 대해 적용할 조건으로, 조건이 참일 때만 요소가 포함됨 1️⃣ 예제 1: 기본 리스트 컴프리헨션squares..

알고리즘 2024.10.21

[Java] Math 클래스 주요 메서드

1. 기본 연산 메서드abs(x) : 절대값max(a, b) : 최대값min(a, b) : 최소값 2. 지수 및 로그 연산 메서드 exp(x) : e^x 계산log(x) : 자연 로그log10(x) : 로그 10pow(a, b) : a의 b 제곱  3. 반올림 및 정밀도 메서드 ceil(x) : 올림floor(x) : 내림rint(x) : 가장 가까운 정수로 반올림round(x) : 반올림  4. 삼각 함수 메서드 sin(x) : 사인cos(x) : 코사인tan(x) : 탄젠트  5. 기타 유용한 메서드 sqrt(x) : 제곱근cbrt(x) : 세제곱근random() : 0.0과 1.0 사이의 무작위 값 생성

알고리즘 2024.09.30

[Java] String 클래스 주요 메서드

문자열 정보 조회length() : 문자열의 길이를 반환한다.isEmpty() : 문자열이 비어 있는지 확인한다. (길이가 0)isBlank() : 문자열이 비어 있는지 확인한다. (길이가 0이거나 공백(Whitespace)만 있는 경우), 자바 11charAt(int index) : 지정된 인덱스에 있는 문자를 반환한다. 문자열 비교equals(Object anObject) : 두 문자열이 동일한지 비교한다.equalsIgnoreCase(String anotherString) : 두 문자열을 대소문자 구분 없이 비교한다.compareTo(String anotherString) : 두 문자열을 사전 순으로 비교한다.compareToIgnoreCase(String str) : 두 문자열을 대소문자 구분 없..

알고리즘 2024.09.29