[백준 알고리즘] 12865번: 평범한 배낭 (Java / 자바)
·
알고리즘/백준
기본 knapsack 문제이다. import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.StringTokenizer;public class boj_12865 { static int N, K, A; static int dp[][]; static int items[][]; static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); static StringTokenizer st; public static void main(String[] args) throws IOException { st..
[백준 알고리즘] 2096번: 내려가기 (Java / 자바)
·
알고리즘/백준
1차원 dp로 해결할 수 있는 문제이다.요즘 이런 유형이 많이 나오는 거 같다. 얼마 전 본 코테에서도 비슷한 문제가 나왔는데..대충 아래 -> 위 or 위 -> 아래 로만 가면서 인접한 칸과 대각에 위치한 칸 중에 최선의 값으로 가는그런 유형이라고 보면되겠다for문을 한번만 돌면서 max, min을 한 사이클에 처리하도록 짰다.import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.StringTokenizer;public class boj_2096 { static int N; static BufferedReader br = new BufferedReader(..
[백준 알고리즘] 11404번: 플로이드 (Java / 자바)
·
알고리즘/백준
플로이드 워셜 알고리즘을 연습하기 좋은 문제였다.import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.Arrays;import java.util.StringTokenizer;public class boj_11404 { static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); static StringTokenizer st; static int N, M; static int[][] dist; public static void main(String[] args)..
[백준 알고리즘] 1865번: 웜홀 (Java / 자바)
·
알고리즘/백준
음수사이클이 있는지 판단하는 문제이다.어려운 점은 특정 지점에서 시작했을 때 사이클이 존재하는지 판단하는게 아니라전체 그래프에서 음수사이클이 발생하는경우가 있는지 체크해야한다.1) 모든 지점에서 벨만포드 수행- 이렇게도 풀 수 있다고 한다.2) 가상 시작점 만들기- 나는 이렇게 풀었는데,안쓰는 0번에서 단방향으로 모든 vertex에 가중치 0으로 연결해줬다.그리고 나서 벨만포드의 시작점을 0번으로 해서0->1,2,3,4.... ->0 (사이클발생) -> 1,2,3,4... (갱신 과정에서 사이클 탐지)이런 방식으로 벨만포드를 한번만 수행하고 풀 수 있었다.import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamR..
API 응답 속도 개선하기 (2) - 데이터베이스 인덱싱(indexing), explain
·
Backend&DB
이전 글 [SQL] 연관 관계가 있는 더미 데이터 생성하기API 성능 테스트를 위한 더미 데이터를 생성하는 과정이다.처음에는 조회 대상인 suggestion만 10만개를 만들었는데,10만개의 suggestion에 동일한 FK(member_key, position_id)를 넣는 실수를 했다.그 결과 당gyujh.tistory.com API 응답 속도 개선하기 (1) - Paging과 Fetch Join, JPA N + 1 문제1.  문제 상황프로젝트 진행 중, 백오피스에서 사용하고 있는 정보수정요청(Suggestion) 조회 API를 개선하려고 한다.페이징 처리가 되어있긴하지만, 4개의 연관 관계가 있는 구조라 JPA N+1(실제로는gyujh.tistory.com 1. 문제 분석@Query("SELECT ..
API 응답 속도 개선하기 (1) - Paging과 Fetch Join, JPA N + 1 문제
·
Backend&DB
1.  문제 상황프로젝트 진행 중, 백오피스에서 사용하고 있는 정보수정요청(Suggestion) 조회 API를 개선하려고 한다.페이징 처리가 되어있긴하지만, 4개의 연관 관계가 있는 구조라 JPA N+1(실제로는 3N+1..) 문제가 발생하고 있다.10만개의 데이터를 기준으로, 사용자가 가장 만족스럽게 느끼는 응답 시간인 200~300ms까지 개선해볼 예정이고,이번 글에서는 jpql의 성능 최적화 방법 중 하나인 Fetch Join을 사용할 것이다. [SQL] 연관 관계가 있는 더미 데이터 생성하기API 성능 테스트를 위한 더미 데이터를 생성하는 과정이다.처음에는 조회 대상인 suggestion만 10만개를 만들었는데,10만개의 suggestion에 동일한 FK(member_key, position_id..
[SQL] 연관 관계가 있는 더미 데이터 생성하기
·
Backend&DB
API 성능 테스트를 위한 더미 데이터를 생성하는 과정이다.처음에는 조회 대상인 suggestion만 10만개를 만들었는데,10만개의 suggestion에 동일한 FK(member_key, position_id)를 넣는 실수를 했다.그 결과 당연히 원하는 테스트 결과가 나오지 않았다.-> 중복된 member, position을 조회하며 fetch join 적용했을 때 더 느림실제 프로덕션 환경에서는 member, company, position, suggestion의 연결이 제각각일 것이기에member, company, position, suggestion을 모두 10만개씩 생성하며, 생성 과정에서 FK를 랜덤으로 선택하도록 SQL을 짰다. 생성 코드DELIMITER $$DROP PROCEDURE IF..
[프로젝트 회고] Gesto : 제스처 인식 프레젠테이션 툴
·
Projects
프로젝트 설명졸업 프로젝트로 Gesto라는 제스처 기반 프레젠테이션 툴을 개발했다.먼저 Gesto는 간단한 제스처로 프레젠테이션(발표) 화면을 조작할 수 있는 Electron.js 기반의 Desktop 어플리케이션이다.꼬집는 제스처, 가리키는 제스처로 화면의 특정 부분을 가리키고, 우리가 터치나 마우스로 조작하듯이 컨트롤할 수 있다.장점으로는 리모콘이나 키보드, 레이저포인터 등의 장치에서 벗어날 수 있다는 것이 있고, 확대/축소 같은 기능도 지원한다는 것이 있다.센서, 패턴인식 방식이 아니기 때문에 누구나 카메라만 있으면 사용할 수 있고, 직관적인 제스처 인터페이스가 장점이다. 원래 제스처 인식 기술에 대해서 큰 관심이 없었는데, 올해 초에 출시된 Apple 사의 Vision Pro 작동 영상을 보고..
[백준 알고리즘] 9095번: 1, 2, 3 더하기 (Python / 파이썬)
·
알고리즘/백준
문제 링크 9095번: 1, 2, 3 더하기 각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 출력한다. www.acmicpc.net 문제 접근 3을 만들 수 있는 경우의 수에서 1을 더한 것과 2를 만들 수 있는 경우의 수에서 2를 더한 것, 1을 만드는 경우의 수에서 3을 더한 것을 모두 합한다. d[5]는 d[4] + d[3] + d[2] 로 정리할 수 있고, 이는 곧 d[n] = d[n-3] + d[n-2] + d[n-1] 이다. 11 이하인 수이므로 for문을 10회 반복한다. 정답 코드 import sys X = int(sys.stdin.readline()) dp = [0] * (X + 1) for i in range(2, X + 1): dp[i] = dp[i - 1]..
[백준 알고리즘] 1463번: 1로 만들기 (Python / 파이썬)
·
알고리즘/백준
문제 링크 1463번: 1로 만들기 첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다. www.acmicpc.net 문제 접근 DP 테이블을 이용한다. 현재 자신(숫자)를 만들기 위해 필요했던 연산의 개수를 저장한다. 각 수 연산을 다 해주고, 이 연산을 거친 결과를 서로 비교해서 가장 최솟값을 DP 테이블에 순차적으로 저장한다. 정답 코드 import sys X = int(sys.stdin.readline()) dp = [0] * (X + 1) for i in range(2, X + 1): dp[i] = dp[i - 1] + 1 if i % 2 == 0: dp[i] = min(dp[i], dp[i // 2] + 1) if i % 3 == 0: dp[i] = min(dp[i],..