본문 바로가기

전체 글

(201)
[JAVA 알고리즘]BAEKJOON 10942번 팰린드롬? 팰린드롬?문제 설명명우는 홍준이와 함께 팰린드롬 놀이를 해보려고 한다.먼저, 홍준이는 자연수 N개를 칠판에 적는다. 그다음, 명우에게 질문을 총 M번 한다.각 질문은 두 정수 S와 E(1 ≤ S ≤ E ≤ N)로 나타낼 수 있으며, S번째 수부터 E번째 까지 수가 팰린드롬을 이루는지를 물어보며, 명우는 각 질문에 대해 팰린드롬이다 또는 아니 다를 말해야 한다.예를 들어, 홍준이가 칠판에 적은 수가 1, 2, 1, 3, 1, 2, 1라고 하자.S = 1, E = 3인 경우 1, 2, 1은 팰린드롬이다.S = 2, E = 5인 경우 2, 1, 3, 1은 팰린드롬이 아니다.S = 3, E = 3인 경우 1은 팰린드롬이다.S = 5, E = 7인 경우 1, 2, 1은 팰린드롬이다.자연수 N개와 질문 M개가 모두..
한 주 정리 : 24_05 1주차 이번 주 목표다양한 방법을 이용한 동시성 제어 해보고 비교해 보기 (일반 DB, JPA, 레디스등)진행 내용잘된 점동시성 제어 JPA와 Spring Data JPA를 이용해서 낙관적 락과 비관적 락 방식으로 동시성 제어 코드를 테스트하고 작동 방식을 이해할 수 있었다.JPA 락과 Redis의 분산락처리와 비교하면서 동작을 이해할 수 있었다.동시성 제어를 개념으로만 정리한 것을 실제로 사용하면서 동작에 대한 이해를 좀 더 할 수 있었다. 먼저 비관적 락방식이 가장 간편하게 동시성 문제를 해결할 수 있었다. 낙관적 락은 애플리케이션 계층에서 후처리를 통해서 동시성 이슈를 컨트롤해야 하는데, 로직을 구성하는 게 상당히 까다로웠다. 예외처리에서 동시성 충돌을 잡아 얼마나 재시도를 해줄지 어떻게 재처리를 하고 이..
[알고리즘] Kruskal 알고리즘이란 Kruskal 알고리즘이란?크루스칼 알고리즘은 그래프의 모든 정점을 최소 비용으로 연결하는 최적해를 구하는 것으로 부분 그래프 중에서 가중치의 합이 최소인 트리인 최소 신장 트리(MST, Minimum Spanning Tree)를 구하는데 적합한 알고리즘이다.Spanning Tree란?신장 트리는 그래프 상의 모든 정점이 사이클 없이 연결된 최소 부분 그래프를 뜻한다.그래프에서 간선의 수가 가장 적다.가장 작은 간선의 수는 n개의 정점을 가지는 그래프에서 (n-1)개일 경우이다.이때, 그래프의 형태는 필연적으로 트리 형태가 된다.이중 간선의 가중치의 합이 최소인 경우를 최소 신장 트리(MST, Minimum Spanning Tree)라고 한다.MST의 활용도시들을 모두 연결하면서 도로의 길이가 최소가 되..
[JPA] 동시성 제어 테스트 코드 (H2) 낙관적 락JPA가 제공하는 낙관적 락은 버전을 이용해서 데이터를 구분하는데, 엔티티에 @version 필드를 만들어 커밋시점에 다를 경우 예외를 발생시켜서 충돌 시 재시도 처리를 해줄 수 있습니다.서비스재고 감소를 하고 커밋 때, 상품의 버전이 달라 충돌이 일어나면, 재시도 횟수를 설정해 두고 재시도 횟수 안에서 상품 처리 다시 해준다. 락 획득 시 원활한 재시도를 위해 잠깐의 텀을 주도록 한다.@Transactionalpublic Long order(Long memberId, Long itemId, int count) { // 엔티티 조회 Member member = memberRepository.findOne(memberId); // 배송 정보 생성 Delivery deliver..
한 주 정리 : 24_04 4주차 이번 주 목표QueryDSL 문법과 활용법 익히기다양한 방법을 이용한 동시성 제어 해보고 비교해 보기 (일반 DB, JPA, 레디스등)진행 내용잘된 점실전! Querydsl 강의 Querydsl의 문법을 익히면서 JPA와의 사용하는 방법과 비교를 할 수 있었습니다.프로젝션 결과 반환을 DTO로 하면서 활용할 수 있는 방법을 익힐 수 있었습니다.다양한 방법의 동적 쿼리를 활용하는 방법을 알 수 있었습니다.부족한 점다양한 방법으로 데이터 활용 해보기생각보다 쿼리를 사용해 보면서 여러 가지 이용 방법을 생각해 보면서 만들어 보려고 하니 생각보다 어떤 식으로 구조를 짜는지부터가 시간이 많이 걸렸다. 기본적인 쿼리 사용을 하다 보니 동시성 제어를 해보지는 못했지만, JPQL을 다루는 데는 조금 익숙해지는 느낌이 ..
[JPA] 데이터 조회 JPA, Spring Data JPA, QueryDSL을 동일한 조회 조건으로 사용해 보면서 차이점을 확인해 보면서 다양하게 숙달해 보기임시 데이터유저 게시글 양방향 매핑게시글 댓글 단방향 매핑게시글 카테고리 단방향 매핑댓글 유저 단방향 매핑유저 3명게시글 카테고리 2개유저당 게시글 5개게시글당 댓글 유저당 3개씩1. 유저가 작성한 게시글 조회마이페이지등에서 자신이 작성한 게시글들을 확인한다.1-1. 기본 조회 - 엔티티를 이용한 DTO 생성게시글 1회, 유저 1회, 카테고리 N회의 쿼리를 보낸다.// JPApublic List findUserPost(String userId) { return em.createQuery("select new study.querydsl.dto.PostResponseD..
한 주 정리 : 24_04 3주차 이번 주 목표 QueryDSL 문법과 활용법 익히기 DB에 관한 내용을 정리하기 (커넥션 풀, 트랜잭션 등) 진행 내용 잘된 점 스프링 DB 1편 -데이터 접근 핵심 원리 강의 커넥션풀과 데이터소스의 개념과 동작방식을 이해할 수 있었습니다. 트랜잭션의 개념과 트랜잭션이 예전의 사용법에서 현재 어떤 식으로 변화되어 왔는지를 통해 문제를 극복한 방법과 어떻게 동작을 하고 있는지를 이해할 수 있었습니다. 자바의 예외처리와 스프링의 예외처리 내용 정리 부족한 점 QueryDSL 내용을 정리할려고 했지만 하지 못했다. 매일 3곳 이상의 업체에 지원하기 실패 이번주 먼가 집중이 안 되는 한 주가 된 거 같다. 준비 기간이 길어지면서 어떤 점이 부족한지를 다시 한번 돌아보며 생각을 정리를 하면서 원래 하려고 했던 부..
[JAVA 알고리즘]BAEKJOON 2812번 크게 만들기 크게 만들기 문제 설명 N자리 숫자가 주어졌을 때, 여기서 숫자 K개를 지워서 얻을 수 있는 가장 큰 수를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 N과 K가 주어진다. (1 ≤ K < N ≤ 500,000) 둘째 줄에 N자리 숫자가 주어진다. 이 수는 0으로 시작하지 않는다. 출력 입력으로 주어진 숫자에서 K개를 지웠을 때 얻을 수 있는 가장 큰 수를 출력한다. 제한사항 없음 입출력 예 input return 4 2 1924 94 7 3 1231234 3234 10 4 4177252841 775841 추가 반례 11 9 99912349111 99 문제 분석 N자리의 숫자와 K개의 숫자를 제거해 가장 큰 수를 만들어야 한다. 문제를 통해 알 수 있는 조건 K개의 숫자를 제거해야 한다. 최종 숫자의 ..