134. 주유소

원형 경로에 n개의 주유소가 있으며, i번째 주유소는 gas[i] 리터의 연료를 가지고 있습니다. 무한한 탱크 용량을 가진 자동차를 사용하여, i번째 주유소에서 i+1번째 주유소로 이동할 때 cost[i] 리터의 연료를 소모합니다. 하나의 주유소에서 출발하여 탱크가 비어 있는 상태에서 시작합니다. 두 정수 배열 gas와 cost가 주어졌을 때, 원형 경로를 한 바퀴 돌 수 있다면 ...

8월 16일 21:52에 게시됨

Java로 구현하는 핵심 정렬 알고리즘의 이해와 활용

1. 삽입 정렬 (Insertion Sort) 삽입 정렬은 현재 위치의 요소를 이미 정렬된 앞부분의 적절한 위치에 찾아 넣는 방식입니다. 구현이 간단하며 데이터가 거의 정렬된 상태에서는 매우 효율적입니다. 시간 복잡도는 평균 $O(n^2)$이며, 안정 정렬(Stable Sort)에 속합니다. public void insertionSort(int[] data) { int len = data.length; for (int i = 1; i < ...

8월 16일 16:41에 게시됨

기술 면접 대비 해시 테이블을 활용한 문제 해결 패턴

해시 데이터 구조의 적용 사례와 최적화 기법 알고리즘 문제를 해결하는 과정에서 특정 원소의 존재 유무나 빈도수를 빠르게 확인해야 하는 상황은 매우 흔합니다. 이때 단순한 나열된 데이터를 순회하며 비교하는 방식은 시간 복잡도가 O(N^2)에 달할 수 있어 비효율적입니다. 이러한 경우 선형 시간인 O(1) 검색 성능을 제공하는 해시 테이블 (HashMap 또는 Set) 을 활 ...

8월 13일 22:44에 게시됨

상인과 수행원 강 건너기 문제의 DFS 알고리즘 구현

문제 정의 세 명의 상인과 각각 한 명의 수행원이 강을 건너야 한다. 작은 배는 최대 두 사람만 탑승할 수 있으며, 상인들이 직접 조종해야 한다. 강의 어느 쪽이든 수행원 수가 상인 수보다 많아지면 상인들을 해칠 계획이다. 상인들이 안전하게 강을 건너려면 어떻게 해야 할까? 수학적 모델링 이 문제를 해결하기 위해 깊이 우선 탐색(DFS) 알고리즘을 적용한다. 선박의 ...

8월 8일 18:46에 게시됨

정수 배열의 홀짝 조건부 정렬

주어진 정수 시퀀스를 특정 규칙에 따라 재정렬하는 문제에 대해 살펴보겠습니다. 이 문제에서는 10개의 정수를 입력받아 다음과 같은 세 가지 주요 조건에 맞춰 정렬해야 합니다. 홀수는 배열의 앞쪽에 배치하고, 짝수는 뒤쪽에 배치합니다. 홀수들 사이에서는 내림차순(큰 수부터 작은 수 순서)으로 정렬합니다. 짝수들 사이에서는 오름차순(작은 수부터 큰 수 순서)으 ...

8월 4일 11:33에 게시됨

중복 문자 없는 최장 부분 문자열 찾기

주어진 문자열에서 반복되는 문자가 없는 가장 긴 부분 문자열의 길이를 찾는 알고리즘 문제입니다. 예를 들어, "abcabcbb"의 경우 중복 문자가 없는 가장 긴 부분 문자열은 "abc"이며 길이는 3입니다. "bbbbb"의 경우 가장 긴 부분 문자열은 "b"이고 길이는 1입니다. 접근 방법 1: 고정 크기 배열을 활용한 슬라이딩 윈도우 이 방법은 고정 크기 배열(예: ASCII 문자 ...

8월 4일 11:27에 게시됨

PHP 배열에서 마지막 등장 요소만 남기고 중복 제거하기

PHP 배열에서 중복된 요소를 제거하면서 마지막에 등장한 요소만 유지하는 방법에 대해 알아보겠습니다. 내장 함수인 array_unique()는 기본적으로 첫 번째 등장 요소를 유지하기 때문에, 원하는 결과를 얻기 위해서는 추가적인 처리가 필요합니다. PHP 배열은 키-값 쌍의 모음입니다. array_unique() 함수가 첫 번째 등장 요소를 유지하는 이유는 값 자체를 기준으로 중 ...

8월 2일 08:29에 게시됨

고급 문자열 처리 알고리즘

문자열 처리 문제 해결 전략 문자열은 다양한 알고리즘 문제의 핵심 데이터 구조입니다. 다음은leetcode 기반의 대표적인 문자열 알고리즘 문제들에 대한 구현과 해설입니다. 1. 문자열 뒤집기 입력된 바이트 배열을 제자리에서 뒤집는 문제입니다. 투 포인터 기법을 사용해 앞뒤로 교환하며 처리합니다. func reverseInPlace(data []byte) { n := len(data) ...

8월 1일 09:51에 게시됨

LeetCode Weekly Contest 90 알고리즘 문제 풀이

1. Buddy Strings (친밀한 문자열) 두 개의 문자열 s와 goal이 주어졌을 때, s의 두 문자를 단 한 번 교체하여 goal과 동일하게 만들 수 있는지 확인하는 문제입니다. 풀이 전략: 두 문자열의 길이가 다르면 절대 같아질 수 없으므로 false를 반환합니다. 두 문자열이 이미 같다면, 문자열 내에 중복된 문자가 하나라도 있어야 교체 후에도 동일함을 유지할 수 있 ...

7월 30일 20:15에 게시됨

연결 리스트 구현 모델

연결 리스트는 대규모 데이터 저장을 위해 메모리 공간을 효율적으로 활용하는 자료구조입니다. 물리적으로 연속된 메모리 주소가 필요 없이 논리적으로 연속된 구조를 유지할 수 있다는 점이 핵심입니다. 구현 모델 개요 본 구현에서는 두 가지 접근 방식을 다룹니다. 첫 번째는 헤더 노드 방식으로서 별도의 헤더 구조체에链表의 크기와 첫 번째 데이터 노드를 가리키는 ...

7월 30일 19:39에 게시됨