[MKG] 프로그램 개발 일지 - 1. 기획
·
카테고리 없음
1. 프로젝트명: MKG 2. 팀 구성 : 2인 ( 디자이너 1 / 개발자 1) 3. 개요: 사내 그룹웨어 개발 4. 주요 기능 가. 근태 관리 ( 출근 / 퇴근 ) 나. 업무 관리 1) 팀원 스케쥴 파악 2) 회의실 대관 다. 이메일 라. 공지사항 5. 프로젝트 수행도구 가. 개발 도구: Java17, SpringBoot 나. 빌드 도구: Gradle 다. DBMS: ORACLE
[알고리즘][DP] 최장 증가 부분 수열(LIS)
·
자료구조와 알고리즘/알고리즘
1. 개념1.1. 정의부분 수열주어진 수열 중 일부를 뽑아 새로 만든 수열뽑아서 새로 만들더라도 전후 관계 순서는 유지 최장 증가 부분 수열(Longest  Increasing Sequence; LIS)부분 수열의 원소 중 오름차순을 유지하면서도 길이가 가장 긴 수열2. 구현핵심 아이디어전체 수열의 LIS 길이 == 각 숫자로 끝나는 LIS 길이 중 최댓값 구하기i번째 원소의 LIS 는 i번째 원소보다 작은 i-n번째 원소들의 LIS 값 중 최댓값에 + 1모든 원소는 자기 자신을 증가 부분 수열로 가지고 있기 때문에 dp[i] = 1 로 초기화   static int solution(int N, int[] sequence) { int[] dp = new int[N + 1]; // dp[i..
[알고리즘] 위상 정렬(Topological Sorting)
·
자료구조와 알고리즘/알고리즘
0. 들어가기에 앞서 특정 순서 조건들을 만족하면서 요소들을 정렬하고자 할 때, 어떤 정렬 알고리즘을 사용할 수 있을까? 예컨대 대학의 선수과목 구조와 같이 특정 수강과목들을 수강할 때 올바른 수강 순서를 찾고자 한다면 어떤 방법을 사용할 수 있을까?지금부터 소개할 위상 정렬은 위 예시와 같이 주어진 순서 조건이 있는 상황에서의 정렬 시 선형 시간만에 해결 가능한, 알고리즘이다.위상 정렬은 어떻게 순서가 존재하는 정렬을 선형 시간만에 해결할 수 있을까?  1. 개념  위상 정렬은 비순환 유향 그래프를 방향성에 거스리지 않고 순서대로 배열하는 방법을 의미한다.  ... 위상은 무엇이고 비순환 유향 그래프는 무엇인가? 위상어떤 사물(정점)이 다른 사물(정점)과의 관계 속에서 가지는 위치나 상태그래프에서는 간..
[알고리즘] 유니온 파인드(Union Find)
·
자료구조와 알고리즘/알고리즘
0. 들어가기에 앞서 여러 정점과 간선으로 연결된 하나의 그래프를 집합이라고 하고, 복수의 집합이 존재한다고 할 때 해당 집합들의 연관 관계를 파악하기 위해서는 어떤 방법을 활용할 수 있을까? 본고에서는 이를 효율적으로 확인할 수 있는 유니온 파인드(Union Find)에 대해서 알아보고자 한다. 1. 개념 유니온 파인드는 여러 노드가 있을 때 특정 2개의 노드를 연결해 1개의 집합으로 묶는 union 연산과 두 노드가 같은 집합에 속해 있는지 여부를 확인하는 find 연산으로 구성된 알고리즘을 의미한다. 이는 마치 그래프를 트리와 같은 형태로 추상화하여 각 노드의 연결을 루트 노드와 자식 노드들 간의 관계로 규정한다. 2. 구현 일반적으로 1차원 배열을 이용해 구현한다. 초기에는 노드가 연결되어 있지 ..
[자료구조] 트라이(Trie)
·
자료구조와 알고리즘/자료구조
0. 들어가기에 앞서 우리가 여러 개의 문자열을 지니고 이 중 특정 문자열의 포함 여부를 알아야 하는 상황이 발생한다면, 어떤 방법들을 활용할 수 있을까?   가장 흔하게 떠올릴 수 있는 방법은 보유 중인 문자열 집합을 순회하면서 찾고자 하는 문자열과의 일치 여부를 비교하는 방법이다. 그러나 이는 문자열의 길이가 최대 m인 문자열 n개에서 찾고자 하는 문자열의 길이가 최대 m일 때, 최악의 경우 O(nm) 의 비교 횟수가 필요하다.  또 다른 방법으로는, 문자열 정렬 후 이진 탐색을 통해 비교하는 방법이 있다.  이진 탐색 자체는 비교 소요 시간을 O(m * log n) 으로 단축시킬 수 있으나 정렬하는 사전 과정 자체에 이미 O(n*m*log n) 의 시간이 소요되므로 비효율적인 방법이라고 할 수 있다..
[JAVA] 람다식(Lambda Expression)
·
프로그래밍 언어 활용/JAVA
1.  람다식의 개념1.1. 람다식의 정의람다식 혹은 람다 표현식이란 함수형 프로그래밍을 구성하기 위해 사용하는 간결한 함수식이며, Java에서 메서드를 축약된 형태로 표현한 것이다.  Java 8 이전에는 메서드를 구현하려면 클래스 정의가 필요했으나, Java 8에서 람다식이 도입된 이후로는 메서드의 이름과 반환 타입을 생략하고 람다식을 변수에 할당하여 사용할 수 있게 되었다. 메서드의 타입, 이름, 매개변수 타입, 중괄호, return 문을 생략하고 화살표(->) 기호를 사용하여 코드의 길이를 줄일 수 있다.  이러한 특징 덕분에 람다식은 익명 함수(Anonymous Function)를 구현하는 방식으로 설명할 수 있다. 1.2. 함수형 프로그래밍과 람다식 함수형 프로그래밍은 함수를 정의하여 데이터 ..
[알고리즘] [DP] 누적합(Prefix Sum)
·
자료구조와 알고리즘/알고리즘
1. 개념1.1. 정의 누적합은 배열이나 리스트의 특정 구간의 합을 빠르게 계산하기 위해 사용되는 알고리즘 기법이다. 특정 구간의 합을 반복적으로 계산할 때, 한 번의 사전 계산으로 이후의 구간 합을 효율적으로 구할 수 있도록 돕는다. 1.2. 특징전처리 단계누적합을 구하는 배열을 생성하기 위해 처음에 한 번만 계산을 수행한다.이 단계의 시간 복잡도는 일반적으로 선형 시간 O(n)이다. 단, 2차원 누적합 배열인 경우 2차 시간 O(n^2)이다.빠른 구간 합 계산이후 특정 구간의 합을 계산할 때, 누적합 배열을 통해 상수 기간 O(1)에 구간 합을 효율적으로 구할 수 있.메모이제이션의 일종이전에 계산된 값을 저장하여 이후 연산에 재사용하기 때문에, 동적 프로그래밍과 유사하게 중복된 계산을 줄여 성능을 향..
[자료구조] 해시 테이블(Hash Table)
·
자료구조와 알고리즘/자료구조
1. 개념1.1. 해시(Hash)의 개념해시(해시 함수; Hash Function)는  임의의 길이를 갖는 임의의 데이터를 고정된 길이의 데이터로 매핑하는 단방향 함수를 의미한다. 즉, 아무리 큰 숫자를 넣더라도 정해진 크기의 숫자가 나오는 함수이다.영단어 hash는 "고기와 감자를 잘게 다져 섞어 요리하여 따뜻하게 차려 낸 음식" 또는 자르다의 의미가 있다.해시 함수의 해시도 어떤 것을 적절하게 섞어서 고유한 값을 만들어 낸다는 의미로 사용하는 것 같다() 예컨대 임의의 숫자를 10으로 나눴을 때 그 나머지를 구하는 함수도 그 값이 무조건 0  ~ 9 에 제한되어 있기 때문에 일종의 해시 함수라고 할 수 있다.예시처럼 서로 다른 입력값에도 동일한 값이 출력되는 경우도 존재할 수 있다.  이런 해시 함수..