전체 글 215

프로그래머스 - 정수 삼각형

https://school.programmers.co.kr/learn/courses/30/lessons/43105 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr   처음에는 dfs를 이용해서 문제를 해결했지만, 답은 맞게 나오나 시간초과가 발생하였다. 때문에 중복 계산을 방지하기 위해 메모이제이션 기법을 사용해야 한다. 메모이제이션 : 동일한 계산을 반복해야 할 경우 한 번 계산한 결과를 메모리에 저장해 두었다가 꺼내 씀으로써 중복 계산을 방지 import java.util.*;class Solution { int[][] dp; int answer = 0; public int solu..

알고리즘/DP 2025.02.05

프로그래머스 - 섬 연결하기(Java)

https://school.programmers.co.kr/learn/courses/30/lessons/42861 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 크루스칼 알고리즘을 알면 바로 풀 수 있는 문제이다.https://developerwoohyeon.tistory.com/192 신장트리(Spanning Tree), 최소신장 트리(Minimum Spanning Tree)신장트리 신장 트리란 그래프 상에서 모든 노드가 사이클 없이 연결된 부분 그래프를 뜻한다. 하나의 그래프에는 신장 트리가 많이 존재할 수 있다. 단, 그래프의 모든 정점을 포함 해야한다.developerwoohyeon.tistor..

신장트리(Spanning Tree), 최소신장 트리(Minimum Spanning Tree)

신장트리 신장 트리란 그래프 상에서 모든 노드가 사이클 없이 연결된 부분 그래프를 뜻한다. 하나의 그래프에는 신장 트리가 많이 존재할 수 있다. 단, 그래프의 모든 정점을 포함 해야한다.  최소 신장 트리 최소신장트리는 신장 트리중 간선의 가중치 합이 가장 작은 트리를 말한다. 알고리즘 문제에서 유용하게 사용될 수 있다.ex)섬 연결하기 (프로그래머스)전력망을 둘로 나누기 (프로그래머스)별자리 만들기 (백준 4386)네트워크 연결 (백준 1922)도시 분할 계획 (백준 1647) 최소 신장 트리 구현 최소 신장 트리 구현의 대표적인 알고리즘은 크루스칼 알고리즘이다. 크루스칼 알고리즘 과정 1) 간선은 가중치를 기준으로 오름차순 정렬한다.  2) 간선을 하나씩 살핀다. 간선을 MST에 추가했을 때 MST에..

JDBC를 이용한 반복문제 해결 - JdbcTemplate

리포지토리에서 JDBC를 사용하면 서비스계층의 순수함을 유지시키기 위해 많은 코드들이 반복되었다.커넥션 조회, 커넥션 동기화PreparedStatement 생성및 파라미터 바인딩쿼리 실행결과 바인딩예외 발생시 스프링 예외 변환기 실행리소스 종료하지만 스프링은 JDBC의 이러한 반복 문제를 해결하기 위해 JdbcTemplate이라는 템플릿을 제공한다. package hello.jdbc.repository;import hello.jdbc.domain.Member;import hello.jdbc.repository.ex.MyDbException;import lombok.extern.slf4j.Slf4j;import org.springframework.jdbc.datasource.DataSourceUtils;i..

BackEnd/Database 2025.02.04

스프링 예외 추상화

스프링은  데이터 접근과 관련된 다양한 예외를 추상화하여 제공한다.  예외의 최고 상위는 org.springframework.dao.DataAccessException 이고 그 밑은 NonTransient예외와 Transient예외로 나뉜다. NonTransient 예외 = 일시적이지 않은 오류(SQL 문법 오류, 데이터 베이스 제약조건 위배 ...)Transient 예외 =  SQL을 다시 시도했을때 성공할 가능성이 있는 예외 스프링 예외 변환기 스프링은 데이터베이스에서 발생하는 오류 코드를 스프링이 정의한 예외로 자동으로 변환해주는 변환기를 제공한다. package hello.jdbc.exception.translator;import lombok.extern.slf4j.Slf4j;import org...

BackEnd/Database 2025.02.04

예외

Error ==> 메모리 부족이나 심각한 시스템 오류와 같이 애플리케이션에서 복구 불가능한 시스템 예외이다.개발자는 이 예외를 catch나 Throwable로 잡으려고 해서는 안된다. 체크 예외(Exception), 언체크 예외(RuntimeException) ExceptionException = 컴파일러가 체크하는 체크 예외이며, 애플리케이션 로직에서 사용할 수 있는 실질적인 최상위 예외이다.하위 예외로 SQLExceptoin과 IOException이 있다.RuntimeException컴파일러가  체크하지 않는 언체크 예외이다.하위 언체크 예외로 NullPointException과 IllegalArgumentException이 있다.  예외 기본 규칙     예외는 잡아서 처리하거나 처리를 못하면 밖으..

자바 2025.02.02

프로그래머스 - 구명보트

https://school.programmers.co.kr/learn/courses/30/lessons/42885 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 문제 이해가 어렵진 않았으나 시간초과를 극복하는게 중요했던 문제이다. 문제를 보고 오름차순 정렬 후 무게가 적은 사람과 무게가 큰 사람을 같이 태워야 보트를 최소한으로 사용할 수 있겠다고 생각했다. import java.util.*;class Solution { public int solution(int[] people, int limit) { int answer = 0; Arrays.sort(people); ..

[Git] 외부 리포지토리 변경 사항 병합하는 법

현재 나의 리포지토리 ==> web_project_woohyeon최신 변경사항이 있는 리포지토리 ==> web_project_chung 나의 리포지토리를 외부 리포지토리와 병합하는 방법에 대해서 알아보자.. 1. web_project_woohyeon 리포지토리 clone해오기git clone https://github.com/cbnu-dev-O2O/web_project_woohyeon.git  2. web_project_woohyeon으로 이동cd web_project_woohyeon  3. 리모트 주소 확인git remote -v  4. woohyeon브랜치 생성 후 해당 브랜치로 이동git checkout -b feature/woohyeon  5. 외부 리포지토리의 리모트 주소 추가git remote..

git 2025.02.01

TransactionTemplate

//트랜잭션 시작TransactionStatus status = transactionManager.getTransaction(new DefaultTransactionDefinition()); try { //비즈니스 로직bizLogic(fromId, toId, money); transactionManager.commit(status); //성공시 커밋} catch (Exception e) { transactionManager.rollback(status); //실패시 롤백throw new IllegalStateException(e); } 위 코드는 보면 비즈니스 로직이 성공하면 commit을 하고 실패하면 rollback을 한다. 이러한 비즈니스 로직이 여러개라면 커밋과 롤백 코드를 각각의 비즈..

BackEnd/Database 2025.02.01

프로그래머스 - 큰 수 만들기(Java)

https://school.programmers.co.kr/learn/courses/30/lessons/42883 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr number의 자리수는 2자리 이상, 100만자리 이하 이므로 모든 경우를 구해서 최대값을 구하게 되면 무조건 시간초과가 발생한다. 따라서 최적의 경우를 구할 수 있는 그리디 알고리즘을 생각해야 한다. EX)4177252841K=4 K가 4 이므로 최종 숫자의 길이는 10-4=6이 되어야 한다. 여섯자리 숫자를 구해야 하므로 처음의 (41772) 중에서 시작점을 구해야 한다.만약5가 시작점이 된다면 여섯자리 숫자를 만들 수 없기 때문이다. 가장..