profile
Hello, Devs!
post-thumbnail

[ TIL ] Longest Increasing Subsequence

Link | Longest Increasing Subsequence Note Longest Increasing Subsequence Algorithm은 주어진 일련의 데이터에서 최장 길이 부분 수열을 구하는 알고리즘이다.

2023년 3월 20일
·
0개의 댓글
·
post-thumbnail

[ TIL ] 위상정렬

📌 About 위상정렬은 선후관계가 정의된 그래프에서 정렬하는 알고리즘이다. 선후관계가 명확해야 하기 때문에 사이클이 있어서는 안된다. 📌 Algorithm 필요한 자료구조 생성 1-1. 각각의 node를 가리키는 개수(진입차수)를 저장하는 리스트 생성 1-2. 각각의 node가 가리키는 node를 저장하는 Map 생성 Edge 정보를 추가 정렬 3-1. 진입차수가 0인 node 탐색 3-2. 탐색한 node가 가리키는 node 들의 진입차수 1 감산 연산 📌 Code More Details

2023년 3월 13일
·
0개의 댓글
·
post-thumbnail

[ TIL ] Stream Iterator

📌 About Stream은 Java 8부터 제공하는 API이다. Collection, Array에 저장된 요소들을 참조하며 code를 실행할 수 있다. 그 중에 iterate 함수는 static 함수로 원하는 값을 규칙적으로 생성할 수 있다. 📌 Iterate 2개의 매개변수를 가진 iterate 함수는 규칙적인 값을 무한히 생성한다. 위의 IntStream은 0, 1, 2, 3... 으로 계속해서 생성이 된다. 마치 아래의 while문처럼 동작한다. 종료 조건문을 다는 방법은 여러가지가 있다. 종료 개수를 알면 limit을 통해 끊을 수 있다. 실행 조건을 알면 takeWhile을 통해 끊을 수 있다. 하지만 사실 iterate 함수 자체에 조건문을 넣을 수 있다. Stream의 원소값이 condition을 만족하면 이후의 작업을 실행한다. 다음 원소값은 update을 통해 갱신한다. Stream과 For문을 비교하면 다

2023년 3월 10일
·
0개의 댓글
·
post-thumbnail

[ 백준 ] 20040 사이클 게임

Link | 백준 20040번 문제 : 사이클 게임 📌 About 부분 집합을 통해 문제를 해결할 수 있다. 이는 Union & find 알고리즘을 통해 구현할 수 있다. 📌 Solution M개의 선분을 차례대로 탐색한다. 선분을 탐색할 때 우선 find 함수를 통해 두 선분을 이었을 때 cycle이 생기는지 판단한다. Cycle이 생기면 해당 순서에서 cycle이 발생한 것이다. Cycle이 생기지 않는다면 union 함수를 통해 선분을 부분 집합에 추가해준다. 📌 Code [GitHub Repository](https://github.com/codesver/problem-solving-hub/tree/main/%EB%B0%B1%EC%A4%80/Gold/20040.%E2%80%85%EC%82%AC%EC%9D%B4%ED%81%B4%E2%80%85%EA%B2%

2023년 3월 9일
·
0개의 댓글
·
post-thumbnail

[ TIL ] LCS Algorithm

📌 About LCS 알고리즘은 Longest Common Subsequence의 약자로 두 문자열에 대해 공통 문자로 이루어진 최장 길이 문자열을 구하는 알고리즘이다. Longest Common Substring의 약자이기도 하나 일반적으로는 subsequence를 의미한다. 두 알고리즘의 차이는 아래와 같다. 📌 Algorithm LCS 알고리즘은 2차원 배열의 DP 방식으로 이루어진다. 📍 Compare Chars 이중 for문으로 lcs 배열을 탐색하면서 알고리즘에 따라 아래대로 DP를 수행하면 된

2023년 3월 6일
·
0개의 댓글
·
post-thumbnail

[ TIL ] Bit Operation

비트 연산은 이해력 측면에서는 좋은 코드가 아니라고 생각한다. 하지만 속도 측면에서는 일반적인 연산에 비해 굉장히 빠르다. 백준 2239번 문제를 일반 연산과 bit 연산으로 풀었을 때의 속도 차이이다. 2배 이상의 속도 차이가 나는 것을 알 수 있다. 성능이 중요한 경우에는 bit 연산으로 대체하는 것도 하나의 방법이다. 이 때문에 이번 기회에 Java Bit Operation(논리 연산자)에 대해 정리하고자 한다. 1. AND AND 연산은 두 피연산자가 모두 true 일때 true가 된다. 2. OR OR 연산은 두 피연산자 중 하나라도 true이면 true 이다. 3. XOR XOR 연산은 두 피연산자가 다를 때 true이다. **4. NOT 연산

2023년 3월 3일
·
0개의 댓글
·
post-thumbnail

[ TIL ] Kruskal Algorithm

Link | Kruskal Algorithm Note Kruskal Algorithm은 graph에서 MST를 구하는 알고리즘이다.

2023년 3월 1일
·
0개의 댓글
·
post-thumbnail

[ TIL ] Floyd Warshall

Link | Floyd Warshall Algorithm Note Floyd Warshall Algorithm은 모든 정점에서 다른 모든 정점까지의 최단 거리를 구하는 알고리즘이다.

2023년 1월 31일
·
0개의 댓글
·
post-thumbnail

[ TIL ] 배열 연결하기

Java에서는 기본형 배열을 지원한다. 이러한 배열은 정적인 배열로 크기가 변하지 않는다. 그러면 두 개의 배열을 연결하기 위해서는 어떤 방법이 있을까? 다음과 같은 두 개의 배열이 있다고 생각해보자. 여기서 우리는 a와 b 배열을 연결하여 배열 c를 만들고자 한다. 반복문 가장 기본적인 방법은 반복문을 사용하는 것이다. System.arraycopy() 또 다른 방법은 System.arraycopy()를 사용하는 것이다. 함수에는 5가지의 인자가 있다. Stream.of() Java 8부터는 Stream을 지원하는데 Stream을 통해 다양한 기능을 구현할 수 있다. Stream의 flatMap은 각각의 요소를 stream으로 변환하는 함수이다. 여기서는 Int 값이기 때문에 flatMapToInt를 사용한다.

2023년 1월 28일
·
0개의 댓글
·