본문 바로가기

전체 글290

DP - LIS, 냅색 알고리즘 LIS (Longest Increasing Subsequence) 주어진 수열에서 가장 긴 증가하는 부분 수열을 찾는 알고리즘이다. 부분 수열은 원래 수열의 순서를 유지하되, 연속하지 않은 원소들로 이루어진 수열을 말한다. public static int solution() { Collections.sort(bricks); dy[0] = bricks.get(0).height; int answer = dy[0]; for (int i = 1; i = 0; j--) { if (bricks.get(i).weight max) { max = dy[j]; .. 2023. 8. 3.
Java) 이진탐색트리 구현 package org.example; import java.util.ArrayList; public class Tree { // 트리를 구성하는 노드 클래스입니다. public static class Node { private int data; private Node left; private Node right; // 생성자 public Node(int data) { this.setData(data); setLeft(null); setRight(null); } public int getData() { return data; } public Node getLeft() { return left; } public Node getRight() { return right; } public void setData(.. 2023. 7. 28.
TCP/IP 4계층 모델 인터넷 프로토콜 스위트(internet protocol suite)는 프로토콜의 집합으로, TCP/IP 4계층 모델이나 OSI 7계층 모델로 설명할 수 있습니다. TCP/IP 4계층 OSI 7계층 애플리케이션 계층 애플리케이션 계층 프레젠테이션 계층 세션 계층 전송 계층 전송 계층 인터넷 계층 네트워크 계층 링크 계층 데이터 링크 계층 물리 계층 애플리케이션 계층 웹 서비스, 이메일 등 서비스를 실질적으로 사람들에게 제공합니다. 더보기 FTP 장치 간의 파일을 전송하는데 사용되는 표준 통신 프로토콜 SSH 네트워크 서비스를 안전하게 운영하기 위한 암호화 네트워크 프로토콜 HTTP 웹 사이트를 이용하는 데 쓰이는 프로토콜 SMTP 전자 메일 전송을 위한 인터넷 표준 통신 프로토콜 DNS 도메인 이름과 IP.. 2023. 7. 12.
네트워크 기초 네트워크 노드(node)와 링크(link)가 서로 연결되어 있거나 연결되어 있지 않은 집합체를 의미합니다. 더보기 노드는 서버, 라우터, 스위치 등 네트워크 장비를 의미 링크는 유선, 무선을 의미 처리량(throughput) 링크를 통해 전달되는 단위 시간단 데이터양을 의미합니다. 단위로는 bps(bits per second)를 사용합니다. 더보기 대역폭 : 주어진 시간 동안 네트워크 연결을 통해 흐를 수 있는 최대 비트 수 지연 시간(latency) 요청이 처리되는 시간을 말하며, 어떤 메시지가 두 장치 사이를 왕복하는 데 걸린 시간을 의미합니다. 네트워크 토폴로지(network topology) 노드와 링크가 어떻게 배치되어 있는지에 대한 방식, 연결 형태를 의미합니다. 트리(tree) 토폴로지 - .. 2023. 7. 12.
[Spring Data JPA] N+1 문제를 해결하기 위한 방법(JPQL의 fetch join, @EntityGraph, ...) 먼저, N+1 문제란 무엇일까? ORM(Object-Relational Mapping) 기술을 사용하는 경우에 발생할 수 있는 문제로,연관 관계가 있는 데이터를 조회할 때, N번의 쿼리가 추가적으로 발생하는 것을 말합니다.더보기ORM 기술에는 익히 들어본 Spring Data JPA, Hibernate 등이 있습니다    표현 방식의 측면에서 N+1 문제와 1+N 문제의 상황으로 나눌 수 있습니다.(둘은 같은 개념이고 나가는 쿼리 수도 동일합니다)  다음 예시를 통해 살펴봅시다.  N+1 문제 (일대다 관계) : 하나의 부서에는 여러 명의 직원이 존재하고, 모든 부서를 조회하는 상황 한 번의 쿼리로 모든 부서를 조회이후, 각 부서별로 N번의 쿼리를 추가로 실행하여 각 부서의 직원 정보를 조회→ 부서 조회.. 2023. 6. 26.
AWS EC2 터미널 - 애플리케이션 빌드 과정 중 멈춤 현상 해결 프리티어 계정을 사용중이고, 배포하기 위해 EC2 터미널에서 애플리케이션을 빌드하는 과정에서 항상 76%, test 빌드 단계에서 실행 시간만 늘어날 뿐, 다음 과정으로 넘어가질 않았습니다. 구글링을 해보던 중, 메모리 부족 현상을 해결하기 위한 swap 메모리를 할당하는 방법이 있었습니다. 속는셈치고 한 번 방법을 따라해보았고, 빌드 과정만 10분이상 지나도 되질 않던 것이 1분만에 빌드되었습니다. swap 메모리란? '가상 메모리 또는 페이징이라고도 불리는 swap 메모리는 시스템의 사용 가능한 메모리 용량을 확장하기 위해 사용되는 기술이다. RAM의 확장으로 사용할 수 있으므로, 활발하게 사용되지 않는 데이터를 저장하기 위한 추가 공간을 제공한다.' 과정은 다음과 같습니다. 일단, EC2 연결을 진.. 2023. 6. 7.
로컬에서 생성한 MySQL 데이터베이스를 마이그레이션하기 Gyul-Box 프로젝트를 진행하면서, 제주도 지역의 동마다의 주거 공간들을 데이터베이스에 넣어야 했다. 배포를 진행한 후에 많은 양의 데이터를 집어넣으려 했지만, 많은 데이터의 통신은 AWS 과금 발생의 위험이 있다는 팀원의 조언이 있었다. 팀원과 상의 후 내린 결론은 MySQL 데이터베이스에 일단 많은 양의 데이터를 로컬에서 넣어준 뒤, AWS RDS로 마이그레이션하기로 결정했다. 마이그레이션하는 과정을 따라가보자. 1. RDS 인스턴스 생성 RDS 인스턴스를 생성한다. default인 보안 그룹 설정에서 사용하는 DB 벤더 유형을 적용하고, 모든 트래픽의 IPv4 접근들을 허용한다. - 백업한 데이터를 RDS 데이터베이스로 가져올 때, connect 에러가 발생하기 때문 2. 데이터베이스 백업 및 .. 2023. 6. 6.
연결된 그룹 개수 찾기(DFS) 1. 각 노드의 방문 여부를 체크할 배열 생성 2. 각 노드에 연결된 노드를 추가할 배열 리스트를 추가 3. 각 노드에 연결된 노드들을 찾아 각 노드의 배열 리스트에 추가 4. 방문하지 않은 노드일 경우, dfs 진행 및 count 1 증가 dfs - 1. 방문할 노드인 경우 즉시 탈출, - 2. 해당 노드를 방문한 걸로 바꾸기 - 3. 연결된 노드들을 순회하면서 방문하지 않은 노드가 있다면, dfs 진행 class Solution { static List graph = new ArrayList(); static boolean[] visited; public int solution(int n, int[][] computers) { // 1 visited = new boolean[n]; // 2 for (.. 2023. 4. 25.
너비 우선 탐색(BFS) vs 깊이 우선 탐색(DFS) 일단, 둘을 다음 그림을 통해 이해해보자. 너비 우선 탐색(BFS) 특징 depth는 0이 아닌 1부터 시작 노드 수가 적고 깊이가 얕은, 검색 대상의 규모가 작은 경우, 유리하다. 큐 이용 장점 답이 되는 경로가 여러 개인 경우에, 최단 경로를 보장한다. 최단 경로가 존재하면, 어느 한 경로가 무한히 깊어진다 하더라도, 최단 경로를 반드시 찾을 수 있다. 단점 DFS에 비해 저장 공간의 필요성이 크다. DFS와는 달리 큐를 이용해서 다음에 탐색할 노드를 저장하므로, 노드의 수가 많을수록 필요 없는 노드들까지 저장해야 하기 때문이다. 최악의 경우에는 모든 경로를 다 살펴봐야 한다. 깊이 우선 탐색(DFS) 특징 depth는 0이 아닌 1부터 시작 검색 대상의 규모가 클 경우, 유리하다. 재귀, 스택 이용.. 2023. 4. 25.