전체 글

공부와 경험의 기록!
스키장 갔다와서 오랜만에 릿코드 풀이! 확실히 여행 다녀오니까 머리가 잘 돌아간다 https://leetcode.com/problems/word-search/?envType=study-plan-v2&envId=top-interview-150 Word Search - LeetCode Can you solve this real interview question? Word Search - Given an m x n grid of characters board and a string word, return true if word exists in the grid. The word can be constructed from letters of sequentially adjacent cells, where adja..
·Data Engineering
검색 엔진으로 알려져 있는 OpenSearch (ElasticSearch) 를 RAG로 활용한 경험에 대해 소개해보려고 한다. OpenSearch 란 무엇인가 ? ElasticSearch 와 무슨 차이지? OpenSearch 는 ElasticSearch 라는 오픈소스 제품을 AWS가 Fork 해서 개발한 제품이다. 그리고 AWS가 ElasticSearch 를 제품화 해서 서비스로 제공하는 검색 엔진 서비스가 OpenSearch 이다. 원래 오픈소스를 복사하는 일 자체는 종종 일어나지만, 오픈소스를 제품화 해서 다른 업계에 타격을 주었기 때문에 논란이 되고 있다. 2023년 기준으로 오픈서치의 다운로드 건수는 1억을 넘겼으니, 결국 AWS가 성공한 셈이다. 필자는 AWS 서비스를 사용하고 있었으며, AWS..
문제 요구사항 "O" 를 "X"로 flip 하라. 단, 가장 자리에 맞닿은 "O"의 경우 뒤집으면 안되며, 이 가장자리와 인접한 다른 "O"의 경우에도 뒤집지 않는다. 풀이 방법 (알고리즘 : BFS) 우선 M*N 배열에서 "O" 가 있는 칸의 위치 (i, j) 를 구한다. -> island 집합에 저장 가장자리에 있는 "O" 를 찾아서, "O"와 인접한 칸들까지 BFS로 찾아서 island 라는 집합에서 빼준다. 남아있는 좌표들은 X 로 flip 이 가능한 위치이므로 모두 변환해 준다. from collections import deque class Solution: def solve(self, board: List[List[str]]) -> None: N = len(board[0]) M = len(b..
·Computer Science
선택 정렬 (Selection Sort) 현재 위치에 들어갈 값을 선택해서 정렬하는 배열이다. 일상에서 크기 순으로 나열할때 하나씩 끄집어내서 정렬하는 걸 생각하면 쉽다. 예를 들어서 오름차순으로 정렬하는 경우에, index 0번에 오는 원소는 모든 값중에서 가장 작은 값을 선택해서 정렬한다. 그후 index 1 번에 오게 될 원소를 찾아서 선택하여 정렬하게 되는데, 0 번에 정렬한 값을 제외하고 나머지 값들 중에서 가장 작은 값을 선택해서 정렬하게 되면 된다. 시간 복잡도 : O(N**2) 시간 복잡도는 루프문을 통해 모든 인덱스에 접근해야 하므로, 기본적으로 O(N)이 걸리고, 하나의 루프에서 현재 인덱스 값과 다른 인덱스의 값들과 비교를 각각 한번씩 수행하여 최소값을 찾은 후 현재 인덱스에 있는 값..
Spark 가 지원하는 데이터 소스를 읽고 쓰는 방법에 대한 단원이다. 데이터 소스 읽기 spark.read.format("csv")\ .option("mode", "FAILFAST")\ # 읽기 모드 .option("inferSchema", "true")\ .schema(someSchema)\ .load() 데이터를 읽을 때는 DataFrameReader를 사용하며, 이는 SparkSession의 read 속성으로 접근한다. 포맷, 스키마, 읽기 모드, 옵션 과 같은 값들을 지정해주어야 한다. 읽기 모드는 스파크가 형식에 맞지 않는 데이터를 만났을 때의 동작방식을 지정하는 옵션이다. 읽기 모드 permissive : 오류 레코드의 모든 필드를 null로 설정하고 모든 오류 레코드를 _corrupt_re..
Segmentation 프로그램을 의미 단위인 여러개의 segment로 구성 작게는 프로그램을 구성하는 함수 하나하나를 세그먼트로 정의 크게는 프로그램 전체를 하나의 세그먼트로 정의 가능 일반적으로는 code, data, stack 부분이 하나씩의 세그먼트로 정의됨 Segment 는 다음과 같은 logical unit 들이다. main(), function, global variables, stack, symbol table, arrays Segmentation Architecture locigal address는 다음의 두가지로 구성 segment table : 각각의 테이블 엔트리는 base 와 limit 을 가지고 있음 base : starting physical address of the segm..
·Algorithm (PS)
https://www.acmicpc.net/problem/11054 11054번: 가장 긴 바이토닉 부분 수열 첫째 줄에 수열 A의 크기 N이 주어지고, 둘째 줄에는 수열 A를 이루고 있는 Ai가 주어진다. (1 ≤ N ≤ 1,000, 1 ≤ Ai ≤ 1,000) www.acmicpc.net 1. 알고리즘 유형 : DP 증가하는 수열, 감소하는 수열 요런 유형은 DP 로 많이 접했어서 DP 라고 떠올렸다. 정확하게는 DP 를 이용한 LIS (Longest Increasing Subsequence, 최장 증가 부분 수열)과 LDS (최장 감소 부분 수열) 을 활용하여 풀 수 있다. (상당히 문제가 naive하게 힌트를 주고 있다) 2. 풀이 예전에 문제를 접한 적이 있어서 금방 떠올랐다. i번째 원소를 기..
Lambda 함수를 trigger 거는 방법에는 여러가지가 있지만 그중에서도 AWS 외부에서 lambda 에 요청을 보내기 위해서 API Gateway 와 연동하게 되면, lambda 함수를 빠르게 서버리스로 배포할 수 있다. API Gateway 와 Lambda 서비스를 사용하여 Serverless HTTP API 를 배포하는 방법에 대해 알아보자 우선 AWS 에서 API Gateway > Create API 를 선택하고, HTTP API 타입을 선택한다. 생성하게 될 HTTP API 이름을 적는다. HTTP method 를 여기서도 정의할 수 있지만 우선 넘어가고, 나중에 한번에 정의하도록 한다. API 배포를 관리하기 위한 Stage 이름을 정한다. 구성 내용을 확인하고 Create 버튼을 눌러 A..
minjiwoo
MJ workspace