본문 바로가기

분류 전체보기

(260)
투 포인터 vs 슬라이딩 윈도우 투 포인터와 슬라이딩 윈도우는 선형 공간 내 연속 구간에 대한 알고리즘이며, 주로 구간 합, 부분 수열의 합을 구하고 비교할 때 사용한다. 특히 1차원 배열을 2회 이상 탐색해야 할 때 시간 복잡도를 O(N^2)에서 O(N)으로 낮춰주는 특징이 있다. 다만 투 포인터는 start, end 포인터를 가변적으로 이동시키고, 슬라이딩 윈도우는 고정된 window 구간을 이동시킨다는 점에서 차이를 보인다. 처음 두 알고리즘을 접했을 땐 그 차이가 크게 다가오지 않았기 때문에 각 알고리즘에 대해 자세히 적어보고자 한다. 투 포인터 : 2개의 포인터(인덱스)를 이동시키며 값을 구하는 알고리즘 start와 end 포인터는 모두 인덱스 0에서 출발하거나, 각각 맨앞과 맨뒤 인덱스에서 시작한다. 구하고자 하는 값(ex...
[DB] MariaDB 이중화 (Replication + MHA) ※ 하단 블로그들을 참고하여 초보 개발자가 진행한 테스트이므로 틀린 점이 있을 수 있습니다. 유의하며 읽어주시고 틀린 점이 있다면 댓글로 알려주시면 감사하겠습니다!   더보기참고 https://www.slideshare.net/neoclova/maria-db-250919306 https://velog.io/@claraqn/%ED%8C%80%EB%82%B4-DB-%EC%9A%B4%EC%98%81-%EA%B5%AC%EC%84%B1%EB%8F%84-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-funvlz8fhttps://velog.io/@claraqn/%ED%8C%80%EB%82%B4-DB-%EC%9A%B4%EC%98%81-%EA%B5%AC%EC%84%B1%EB%8F%84-%EC%9D%B..
[MSSQL] MSSQL 에이전트 작업 알림 메일 (SMTP) 설정하기 발신메일 설정 1. [관리] - [SQL Server 로그] - [데이터베이스 메일] - [데이터베이스 메일 구성]2. [다음 태스크를 수행하여 데이터베이스 메일 설치] - [다음]         3. SMTP 발신 계정 생성             a. 하단 [추가] 클릭           b. [계정 이름], [전자메일 주소], [서버 이름], [포트 번호] 등 입력,          Windows 인증/사용자 인증/익명 인증 중 선택 (기본 인증 ⇒ 이메일, 비밀번호 입력)       4. SMTP 계정과 연결할 프로필 생성     a. 상단 [프로필 이름], [설명] 입력 - [다음]    b. [공개 프로필] - 발신계정 프로필 선택 - [다음]    c. 시스템 매개 변수 설정 - [다음] - ..
이분 탐색 이분 탐색 : 정렬된 숫자들의 중간값과 target 값을 비교하여 탐색 범위를 절반씩 줄여가는 알고리즘 ※ 중간값 = (a+b)/2 이분 탐색 시 소수점 이하는 내림하여 중간값을 구함 시간복잡도 : O(log n) (새로 정렬해야 하면 O(nlogn)) 연산마다 탐색 범위를 절반 줄이므로 모든 숫자들을 선형 탐색하는 것보다 상대적으로 빠르다 코드 기본 while (left arr[mid]){ // target 값이 배열 중간값보다 크면 left = mid + 1; // 우측 탐색 } else if (target < arr[mid]){ right = mid - 1; // 좌측 탐색 } else { return mid; } } return -1; while문 안에서 target 값과 배열 내 중간값을 비교해..
[백준/자바] dp 1010번 - 다리 놓기 문제 재원이는 한 도시의 시장이 되었다. 이 도시에는 도시를 동쪽과 서쪽으로 나누는 큰 일직선 모양의 강이 흐르고 있다. 하지만 재원이는 다리가 없어서 시민들이 강을 건너는데 큰 불편을 겪고 있음을 알고 다리를 짓기로 결심하였다. 강 주변에서 다리를 짓기에 적합한 곳을 사이트라고 한다. 재원이는 강 주변을 면밀히 조사해 본 결과 강의 서쪽에는 N개의 사이트가 있고 동쪽에는 M개의 사이트가 있다는 것을 알았다. (N ≤ M) 재원이는 서쪽의 사이트와 동쪽의 사이트를 다리로 연결하려고 한다. (이때 한 사이트에는 최대 한 개의 다리만 연결될 수 있다.) 재원이는 다리를 최대한 많이 지으려고 하기 때문에 서쪽의 사이트 개수만큼 (N개) 다리를 지으려고 한다. 다리끼리는 서로 겹쳐질 수 없다고 할 때 다리를 지..
[백준/자바] 이분탐색 2805번 - 나무 자르기 문제 상근이는 나무 M미터가 필요하다. 근처에 나무를 구입할 곳이 모두 망해버렸기 때문에, 정부에 벌목 허가를 요청했다. 정부는 상근이네 집 근처의 나무 한 줄에 대한 벌목 허가를 내주었고, 상근이는 새로 구입한 목재절단기를 이용해서 나무를 구할것이다. 목재절단기는 다음과 같이 동작한다. 먼저, 상근이는 절단기에 높이 H를 지정해야 한다. 높이를 지정하면 톱날이 땅으로부터 H미터 위로 올라간다. 그 다음, 한 줄에 연속해있는 나무를 모두 절단해버린다. 따라서, 높이가 H보다 큰 나무는 H 위의 부분이 잘릴 것이고, 낮은 나무는 잘리지 않을 것이다. 예를 들어, 한 줄에 연속해있는 나무의 높이가 20, 15, 10, 17이라고 하자. 상근이가 높이를 15로 지정했다면, 나무를 자른 뒤의 높이는 15, 15..
[백준/자바] 백트래킹 9663번 - N-Queen 문제 N-Queen 문제는 크기가 N × N인 체스판 위에 퀸 N개를 서로 공격할 수 없게 놓는 문제이다. N이 주어졌을 때, 퀸을 놓는 방법의 수를 구하는 프로그램을 작성하시오. ※ 체스 규칙 상 퀸은 직선, 대각선으로 이동 가능함 = 같은 행, 열, 또는 대각선상에 놓인 퀸은 서로 공격 가능 해결 백트래킹 백트래킹은 탐색 조건이 있는 DFS라고 볼 수 있다. DFS 과정에서 조건에 부합하는 노드는(promising) 계속 탐색하고, 조건에 부합하지 않는 노드는 탐색에서 배제한다(pruning). 1. promising(유망한) 조건에 부합하는 노드일 때 유망하다고 한다. promising 검사에서 통과 시(조건에 부합할 때) 다음 depth로 넘어가 DFS 탐색을 계속한다. 2. pruning(가지치..
[백준/자바] dp 11053번 - 가장 긴 증가하는 부분 수열 문제 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이고, 길이는 4이다. 풀이 작은 부분 문제들로 나눠 그 결과를 저장하면서 반복 계산해 (DP) 풀 수 있는 문제이다. 단, 이때 시간복잡도는 이중 for문 연산으로 인해 N^2 이 된다. public class LIS { public static int[] seq; // 입력값 배열 public static int[] dp; // DP 배열 (dp[i]는 seq[i]까지의 최장부분수열 길이) public static void main(String[] a..
[프로그래머스/자바] 점프와 순간 이동 문제 OO 연구소는 한 번에 K 칸을 앞으로 점프하거나, (현재까지 온 거리) x 2 에 해당하는 위치로 순간이동을 할 수 있는 특수한 기능을 가진 아이언 슈트를 개발하여 판매하고 있습니다. 이 아이언 슈트는 건전지로 작동되는데, 순간이동을 하면 건전지 사용량이 줄지 않지만, 앞으로 K 칸을 점프하면 K 만큼의 건전지 사용량이 듭니다. 그러므로 아이언 슈트를 착용하고 이동할 때는 순간 이동을 하는 것이 더 효율적입니다. 아이언 슈트 구매자는 아이언 슈트를 착용하고 거리가 N 만큼 떨어져 있는 장소로 가려고 합니다. 단, 건전지 사용량을 줄이기 위해 점프로 이동하는 것은 최소로 하려고 합니다. 아이언 슈트 구매자가 이동하려는 거리 N이 주어졌을 때, 사용해야 하는 건전지 사용량의 최솟값을 return하는 ..
[Git] github ssh 인증 실패 "git@github.com: Permission denied (publickey)" feat. config 확장자 실수.. 문제 상황 git bash에서 ssh 키들을 생성하고 (파일명: id_rsa_github, id_rsa_gitlab) 각 계정에 공개키를 등록했는데, gitlab 인증키만 인식되고 github 키는 인식이 안 되는 오류가 발생했다. 이에 연결 테스트를 진행하며 인증 과정을 디버깅하며 문제를 해결했다. 해결 과정 ssh 연결 테스트 ssh -T git@github.com ## 오류 메시지 git@github.com: Permission denied (publickey) 메시지에서 볼 수 있다시피 ssh 공개키 인증 실패로 인한 오류이다. ssh 연결 테스트 - 로그 확인 ssh -vT git@github.com ## > debug1: identity file /Users/YOU/.ssh/id_rsa typ..