전체 글 405

BOJ 14567 java 풀이

DP 문제이다.선수과목에서 숫자가 큰거보다 나중에 들어야하는 작은거는 없다.작은거부터 큰거로 가면서 이전 선수과목 중 가장 기수가 높은거 + 1 해주면 된다.그리고 그 과정에서 이 과목이 내꺼의 선수과목인지를 미리 체크해서 그걸 쓰면 됨 import java.util.Scanner;class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int N = sc.nextInt(); int M = sc.nextInt(); boolean[][] cond = new boolean[N+1][N+1]; int[] dp = new in..

알고리즘 공부 2025.09.14

BOJ 2303 재풀이

DP로 푼다.내꺼 기준 왼쪽만 본다. - 내가 왼쪽이랑 숫자를 바꾸려 하면 : 왼쪽 숫자는 변경되지 않은 상태일때만 가능- 내가 왼쪽이랑 숫자를 바뀌지 않는다면 : 왼쪽 숫자가 변경되었든 아니든 상관 없음. 근데 내 왼쪽이 vip거나 내가 vip 면 그냥 왼쪽의 모든 방법을 더해주면 된다. 즉, 앞의 상태를 가지고 있는 DP import java.util.Scanner;class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); boolean[] seat = new boolean[n+1]; int vips = ..

알고리즘 공부 2025.09.14

BOJ 17070 java 풀이

DP 문제이고 (BFS 쓰면 시간초과남)중요한건 결국 "해당 위치에 도달하는 방법을 구하면 된다"예를 들어 왼쪽으로 오는 방법은 왼쪽/대각선, 세로로 오는 방법은 세로/대각선, 대각선으로 오는 방법은 왼쪽/세로/대각선그래서 그 이전에 있던 방법들을 구하면 됨 import java.util.Scanner;class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int[][] map = new int[n][n]; for (int i = 0; i 0) { dp[2][i][j] ..

알고리즘 공부 2025.09.14

LeetCode 1293. Shortest Path in a Grid with Obstacles Elimination java 풀이

문제가 어려워서 오래 걸림. 최단 거리 -> BFS장애물 부수기 -> 해당 위치에 n 번 부술 수 있는 상태로 방문한 적 있는가? 상태 체크 --> 유일성 확인 로직을 부술 수 있는 횟수까지 포함해야 한다. 3차원 배열로 check 하지 않으면 나중에 부술 수 있는데 안부수는 문제가 생김. class Solution { private static boolean[][][] check; private static int[] xMove = {-1, 1, 0, 0}; private static int[] yMove = {0, 0, -1, 1}; public int shortestPath(int[][] grid, int k) { if(grid.length == 1 && grid[..

알고리즘 공부 2025.09.13

미미키는 NCP를 어떻게 활용했는가

미미키가 뭐에요?'아.. 그 밈 뭐더라?'하며 특정 상황에 맞는 밈을 찾지 못했던 경험을 해결하기 위해 기획된 밈 백과사전 서비스입니다.밈을 쉽게 찾고, 어떨 때 쓸 수 있는지 확인하고, 상황에 맞춰 빠르게 활용할 수 있는 서비스에요. 여기서 밈잘알 테스트를 해볼수도 있고 실제로 앱을 깔아서 쓰셔도 좋습니다.서버는 어떻게 구성했나요?NCP 를 활용했고, 인프라 구축과 배포 환경은 최대한 자동화된 방식으로 할 수 있도록 다음과 같이 적용했습니다.Compute > Server (VM): Docker 컨테이너(애플리케이션, 데이터베이스 등)를 실행하고 실제 서비스를 운영하는 가상 서버 환경으로 사용했습니다.Container > Container Registry: GitHub Actions에서 빌드된 애플리케..

MyBatis 의 cache

MyBatis 의 cacheMyBatis 에는 두 종류의 캐시가 존재한다.1차 캐시 (Local / Session Cache)2차 캐시 (Global / Mapper Namespace Cache)1차 캐시SqlSession 레벨의 캐시이다.즉 SqlSession 내에서만 유효하기 때문에 서로 다른 SqlSession 간에는 공유되지 않는다.Default로 활성화되어 있다.동작 방식SQL 문장 수행 시 결과를 캐싱하여, 이전과 완전히 동일한 문장이 오면 캐싱된 데이터를 반환한다.즉 완전히 동일한 문장과 파라미터여야 한다는 것SqlSession 이 닫히거나 CUD작업이 발생하면 1차 캐시는 비워진다.2차 캐시SqlSessionFactory 레벨의 캐시이다.즉 동일한 Mapper Namespace 내의 모든 ..

포워드 프록시와 리버스 프록시에 관하여

포워드 프록시와 리버스 프록시에 관하여포워드 프록시클라이언트와 서버 사이에 위치하며, 클라이언트를 대신해 서버에 요청을 전달동작 방식클라이언트 측에서 특정 도메인에 접근 시도해당 요청은 포워드 프록시로 이동포워드 프록시가 도메인에 접근하여 데이터 받아옴해당 데이터를 클라이언트로 전달요런 식으로 실제 클라이언트의 요청을 서버로 전달하고 데이터를 받아오는 과정을 전담하는 것이다.장점클라이언트 보호서버 측에서는 이게 포워드 프록시에서 온 요청이기 때문에 클라이언트를 특정할 수 없다.이 덕분에 악성코드가 포함된 사이트로 접근을 막을 수 있고, 혹은 특정 사이트의 접근을 차단할 수 있다.캐싱을 통한 속도 향상여러 클라이언트가 동일한 콘텐츠를 요청하는 경우 데이터를 캐싱해서 성능을 높인다.리버스 프록시얘는 서버 측..

동시성 처리에 관한 짧은 고민

동시성 처리에 관한 짧은 고민병렬성과 동시성먼저 병렬성과 동시성 두 키워드에 대해서 알아두는 것이 좋다.병렬성여러 작업이 실제로 동시에 여러 CPU 코어에서 실행즉, 작업을 분할하여 동시에 처리하여 시간 단축과 처리량 상승참고로 이거는 여러 CPU 코어가 필요하고 각 코어가 독립적으로 작업을 수행한다.동시성여러 작업이 번갈아 가며 처리되는 것처럼 보이는 것. 실제로 동시에 처리되는건 아니고 여러 작업을 번갈아 수행해서 동시 처리되는 것처럼 보이게 함즉, 작업을 나누어 관리하고 한 작업이 I/O 대기 등으로 멈춰있을 떄 다른 작업을 수행해서 응답성을 높인다.이거는 단일 코어 CPU에서 가능하며 각 작업 시간을 짧게 나누어 수행한다.그러면 여기서 동시성 문제가 무엇일까?동시성 문제동시성 문제란, "공유 자원..

대규모 데이터를 배치로 처리할 때에 알아두면 좋은 내용

대규모 데이터를 배치로 처리할 때에 알아두면 좋은 내용배치가 뭐고 왜 쓰는거지?간단하게 말하자면 데이터나 작업 등을 자동으로 처리하는 방법이다.사용 용도는 다음과 같다.대용량 데이터 처리 : 실시간으로 하기 곤란한 대용량 데이터 처리반복 작업 : 주기적으로 수행되기 때문에 자동으로 되면 좋은 것복잡하거나 리소스가 많이 드는 작업 : 시간이 오래 걸리거나 리소스 소모가 심하면 사용량이 적을 때에 배치로 처리 가능즉, 얘는 개발자가 직접 처리하지 않고 뭉탱이로 처리할 수 있는 용도이고 장점은대용량 처리 가능작업 용이자동화부하 분산등이 있을 것이다.대용량 데이터 사용 시 배치 주의점배치를 사용하면 대용량 데이터를 처리할 수 있다.그런데... 만약 그 대상이 되는 데이터가 진짜 짱많은면 어떨까?생각을 해보면배치..

MySQL Index 설계 방법 With Cardinality(무조건 Cardinality가 높아야 할까에 대한 고찰)

MySQL Index 설계 방법 With Cardinality(무조건 Cardinality가 높아야 할까에 대한 고찰)Cardinality 란 무엇인가?컬럼에 저장된 고유한 값의 개수즉, 전체 데이터의 개수에 비해 고유한 값의 수가 얼마나 되는지를 나타낸다.카디널리티가 높다 : 고유한 값이 많다(겹치지 않는 데이터가 많다.)카디널리티가 낮다 : 고유한 값이 적다(겹치는 데이터가 많다.)그러면 이게 어떤 역할일까?인덱스를 사용하는 목적은 검색 속도의 상승이다.인덱스를 만들 때에 Cardinality 를 고려하면(인덱스를 통해 검색할 데이터의 선택도를 고려한다면) 검색 속도를 상승시킬 수 있다.옵티마이저는 쿼리 문법을 분석하고 의미를 해석할 때, 테이블 크기, 행 수, 컬럼의 Cardinality, 값의 분..