일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 자바편
- d
- iterator
- 코드로배우는스프링웹프로젝트
- Kernighan의 C언어 프로그래밍
- 스프링부트핵심가이드
- 코드로배우는스프링부트웹프로젝트
- 데비안
- 처음 만나는 AI수학 with Python
- /etc/network/interfaces
- 선형대수
- 알파회계
- 페이징
- 구멍가게코딩단
- resttemplate
- 자료구조와 함께 배우는 알고리즘 입문
- 처음 만나는 AI 수학 with Python
- 티스토리 쿠키 삭제
- GIT
- 자료구조와함께배우는알고리즘입문
- 스프링 시큐리티
- 친절한SQL튜닝
- 리눅스
- 목록처리
- 이터레이터
- 네트워크 설정
- network configuration
- baeldung
- ㅒ
- 서버설정
- Today
- Total
목록전체 글 (406)
bright jazz music
규모가 큰 데이터셋에서 데이터의 하위 집합을 추적하는 문제 있어 유용하다. 배열이나 문자열에서 일련의 데이터를 찾는 경우다.예를 들면 특정 문자열에서 고유한 문자가 연속되어야 하는 경우,"hellothere"--> hel --> el --> l --> lother 또는 배열에서, 일련의 두 원소의 합이 가장 큰 경우를 구하려 할 때maxSubarraySum([1,2,5,2,8,1,5], 2) ==> 10 이런 경우에 윈도우를 하나 만들어야 한다. 이 윈도우는 단일 변수, 하위 배열, 또는 문자열이 될 수도 있다.조건에 따라 이 창문을 이동시킨다. 이동 시작위치와 방향은 자유지만, 일반적으로는 왼쪽(시작점)에서 오른쪽(종료지점)으로 이동한다.경우에 따라 새로운 윈도우를 만들기도 한다. maxSubarra..
한 개의 포인터가 이동하며 조건에 부합하는 값을 찾는 것이 아니라 여러 개의 포인터를 사용하여 값을 찾아내는 방식function sumZero(arr){ for(let i = 0; i 아래는 포인터를 투 개 사용한 투 포인터 방식이다. 포인터를 시작 지점과 끝 지점, 두 개를 사용하여 중앙을 향해 범위를 좁혀오는 방식이다. 단, 배열이 정렬돼 있어야 한다.// 배열이 정렬돼 있어야함.function sumZero(arr) { let left = 0; let right = arr.length - 1; while(left 0) { right--; } else { left++; } }} 예제) 고윳값의 개수다중 포..
빈도수를 세야하는 경우 객체를 활용하면 편리하다.- 문자열과 배열을 반복시킬 때는 for~ of,객체의 속성을 반복시킬 때는 for ~ in 을 사용함에 주의할 것. 빈도수 세기- validAnagram두 개의 문자열이 주어졌을 때, 두 번째 문자열이 첫 번째 문자열의 애너그램인지 확인하는 함수를 작성합니다. 애너그램은 다른 글자의 글자를 재배열하여 형성된 단어, 구 또는 이름입니다. (예시: cinema -> iceman)예시:validAnagram('', '') // truevalidAnagram('aaz', 'zza') // falsevalidAnagram('anagram', 'nagaram') // truevalidAnagram("rat","car") // false) // falsevalidAn..
실행 컨텍스트(excution context): 실행할 코드에 제공할 환경 정보들을 모아놓은 객체. 동일한 환경에 있는 코드들을 실행할 때 필요한 환경 정보들을 모아 컨텍스트를 구성하고, 이를 콜 스택에 쌓아 올렸다가 가장 위에 쌓여 있는 컨텍스트와 관련 있는 코드들을 실행한느 식으로 전체 코드의 환경과 순서를 보장한다. '동일한 환경'이란 하나의 실행 컨텍스트를 구성할 수 있는 방법으로, 전역공간, eval() 함수 등이 있다. 자동으로 생성되는 전역공간과 악명이 높은 eval을 제외한다면, 함수를 실행하여 컨텍스트를 구성하는 방법이 있다.
1. 메모리 생존주기자바스크립트에서의 메모리 생존주기는 대체로 아래와 같은 과정을 거친다. 할당: 필요한 메모리를 할당받는다. 이는 변수를 초기화 할 때 ('let a = 10;'), 객체를 만들 때('let obj = {}'), 함수를 호출할 때 등 다양한 상황에서 발생한다.사용: 할당받은 메모리를 읽거나 쓰는 작업을 수행한다. 예를 들어, 변수의 값을 변경하거나 객체의 속성에 접근하는 등의 작업이 여기에 해당한다.해제: 프로그램이 더이상 해당 메모리를 필요로 하지 않을 때, 메모리는 해제되어 시스템에 반환된다. 자바스크립트에서는 가비지 콜렉터가 이 작업을 자동으로 수행한다. 자바스크립트에서는 자바스크립트 엔진의 가비지 콜렉터가 불필요한 메모리를 자동으로 해제한다. 이는 Mark-and-Sweep(표시..
1. 브루트 포스 알고리즘브루트포스 알고리즘- 모든 가능한 경우의 수를 탐색하여 문제를 해결하는 방법이다- 가장 단순하고 직관적인 문제 해결 방식이다- 완전 탐색이라고도 한다장점:- 구현이 쉽고 단순하다- 확실하게 정답을 찾을 수 있다단점:- 시간복잡도가 높다 (대부분 O(n²), O(2ⁿ) 등)- 데이터가 커지면 시간이 기하급수적으로 증가한다간단한 예제// 1. 배열에서 두 수의 합이 target이 되는 조합 찾기function findTwoSum(arr, target) { for(let i = 0; i 브루트 포스가 주로 사용되는 경우:1. 문제의 크기가 작을 때2. 더 효율적인 알고리즘을 찾기 어려울 때3. 여러 알고리즘의 결과를 검증할 때4. 최적화 문제를 해결할 때실제 코딩테스트나 알고리즘..
백트래킹은 가능한 모든 해결책을 탐색하면서, 현재 선택이 잘못된 방향으로 가고 있다고 판단되면 이전 단계로 돌아가서(백트랙) 다른 선택을 시도하는 알고리즘이다. N-Queen 문제를 대표적인 예로 들 수 있다. N-Queen 문제는 체스판 위에 N개의 퀸을 배치하는 문제이다. 어떤 두 퀸도 같은 행, 열, 또는 대각선에 위치하지 않도록 하는 모든 가능한 배치를 찾는 것이다. 만약 같은 행, 열, 대각선에 하나라도 위치하게 된다면 일치한 퀸은 서로가 공격할 수 있는 상황에 노출된다. 이 문제에서는 각 행에 퀸을 배치하면서 이미 배치된 퀸과 충돌하지 않는 위치를 찾는다. 만약 충돌하지 않는 위치가 없다면 그 행에 대한 배치를 포기하고 이전 행으로 돌아가 다른 위치를 시도한다. 이러한 방식을 시도하면 모든 가..
정의핸들러에 전달되는 인자를 전달받기 전에 처리하는 중간 단계의 기능PipeTransform 인터페이스를 구현하는 클래스transform() 메서드를 통해 데이터 변환/검증 수행 예시 @Get(':id') async findOne(@Param('id', ParseIntPipe) id: number) { // 여기서 pipe는 @Param()이 아니라 ParseIntPipe이다. // @Param 데코레이터(실제로는 함수)에 'id'라는 파라미터 이름과 ParseIntPipe를 매개변수로 전달한다. // 실행 순서: // 1. @Param이 URL에서 'id' 값을 추출 (예: "123" 문자열) // 2. 추출된 값이 ParseIntPipe의 transform 메소드로 ..
탐욕법(Greedy Algorithm)은 각 단계에서 그 순간에 최적이라고 생각되는 선택을 하는 알고리즘이다. 탐욕법의 주요 특징:단순성: 구현이 비교적 간단다지역적 최적: 각 단계에서 최적의 선택을 한다빠른 실행: 일반적으로 실행 속도가 빠다주의할 점:탐욕법이 항상 최적의 해를 보장하지는 않다특정 문제에만 적용 가능하다탐욕법이 잘 동작하는 다른 예제들:회의실 배정 문제크루스칼 알고리즘(최소 신장 트리)허프만 코딩 가장 대표적인 탐욕법 예제가 "거스름돈 문제"이다. function getChange(amount) { // 사용 가능한 동전들 (큰 단위부터 정렬) const coins = [500, 100, 50, 10]; const result = []; for (l..
동적 프로그래밍은 하나의 문제를 여러 개의 작은 문제로 나누어 해결하고 해당 결과를 저장한 후에 더 큰 문제를 해결할 때 사용하는 방법론이다. 따라서 알고리즘이라기보다는 문제 해결 방법론으로 보는 관점도 있다. 동적 프로그래밍은 개발자의 관점에서 볼 때, '큰 문제'에 중점을 두어야 한다. '큰 문제'가 있어야 동적 프로그래밍의 효율성이 극대화 된다. 즉, 동적계획법은 복잡한 문제를 더 작은 하위 문제로 나누어 해결하는 알고리즘 설계 기법이다. 특징:작은 문제의 해결책을 저장(메모이제이션)하여 재사용중복 계산을 피함으로써 성능 향상상향식(bottom-up) 또는 하향식(top-down) 방식으로 구현 가능피보나치 수열을 예로 들어 보면,// 일반적인 재귀 방식 (비효율적): n이 커질수록 함수가 재귀적으..