전체보기

💎백엔드 : Backend

[Servlet]

1. WebArchitecture page 이동방법 url 입력 (get방식) link (get방식) form (get방식) get (get방식) post 즉 form에 post로 데이터를 전송하지 않으면 모두 GET 방식이다. Persistence Login = 데이터베이스 로직 2. Servlet Servlet = Java + HTML 자바에서 백앤드를 지원하는 api 두 가지 servlet → 자바안에 html이 포함 jsp → html 안에 자바가 포함 처음에 servlet이 먼저 나옴 → 쌍따옴표 안에 html을 하나하나 넣는게 너무 힘들어 → html에 자바 넣으면 어떨까? → jsp 등장 외형 자체가 .java 서블릿 파일에서 생성자 안 만들어도 됨 → init메소드 사용하면 되니까 웹에서 ..

🥇코딩테스트:Algorithm

다익스트라 (백준 13549 숨바꼭질 3)

다익스트라로 풀 수 있는 문제상황 한 지점에서 다른 한 지점까지의 최단 경로 한 지점에서 다른 모든 지점까지의 최단 경로 모든 지점에서 다른 모든 지점까지의 최단 경로 해당 문제는 한 지점에서 다른 한 지점까지의 최단 경로를 구해야 하는 문제이다. 문제를 그래프로 바꾸는게 중요하다고 생각한다. 수빈이는 위치 X에서 -1, +1, *2 로 움직일 수 있으니까 위치 X를 노드라고 생각했을 때 X-1, X+1, X*2 를 연결된 노드, 가중치는 문제에서 주어진 (1, 1, 0) 으로 생각했다. 다익스트라 알고리즘 (우선순위큐 활용) 코드 package com.mincheolsong; import java.io.*; import java.util.*; public class Main { // boj 13549 ..

🥇코딩테스트:Algorithm

트리의 지름 (백준 1167번)

트리의 지름이란 트리에서 임의의 두 점 사이의 거리 중 가장 긴 것이다. 결론 임의의 정점에서 가장 거리가 긴 노드를 찾는다. (dfs 한 번) 찾아진 노드에서 가장 거리가 긴 노드까지의 거리를 구하면 된다. (dfs한 번) (총 dfs 두 번에 트리의 지름을 찾을 수 있다) 설명 위 트리의 경우 1 - 3 - 4 - 5 가 트리의 지름(트리에서 임의의 두 점 사이의 거리 중 가장 긴 것) 경로가 된다. 여기서 트리의 지름이 되는 양 끝 노드는 1과 5이다. 이 때 임의의 정점에서 거리가 가장 긴 노드는 1 혹은 5를 반드시 지나게 된다. 1에서 거리가 가장 긴 경로 : 1 - 3 - 4 - 5 2에서 거리가 가장 긴 경로 : 2 - 4 - 5 3에서 거리가 가장 긴 경로 : 3 - 4 - 5 4에서 거..

🥇코딩테스트:Algorithm

플로이드 워셜 알고리즘

모든 노드에서 다른 모든 노드까지의 최단경로를 모두 계산함 다익스트라 알고리즘과 마찬가지로 단계별로 거쳐 가는 노드를 기준으로 알고리즘을 수행 다익스트라와 다르게 매 단계마다 방문하지 않은 노드 중에 최단 거리를 갖는 노드를 찾는 과정이 필요하지 않음. 2차원 테이블에 최단 거리 정보를 저장 DP 유형에 속함 (점화식에 맞게 3중 FOR문을 이용해서 2차원 테이블을 갱신) 노드의 계수가 밀집그래프(완전그래프에 가까운 그래프)인 경우 플로이드 워샬 알고리즘이 효율적이다. 밀집그래프가 아닌 경우 다익스트라를 n번 돌리는게 빠르다 O(n^3)의 시간복잡도로 다익스트라(인접행렬을 사용한 경우)의 시간복잡도와 동일하다 N이 100이면 → 100만이어서 가능, 500이어도 → 1억 2천 500만 이어서 try해볼 ..

🥇코딩테스트:Algorithm

백준 9465 스티커

dp로 푸는 문제. 알게된 점 점화식을 세울 때 arr[r][c]를 포함하는 경우와 포함하지 않는 경우만 생각하지 말자 이번 문제는 arr[r][c]를 뽑을 수 있는 이전 위치를 고려해야 했다! dp는 최적해의 부분최적해를 생각하며 점화식을 세워야 한다. 처음 접근방식 arr[r][c] 의 스티커를 떼는 경우와 떼지 않는 경우를 고려해서 점화식을 세우려고 했다. 올바른 접근방식 arr[r][c]의 스티커를 뗄 수 있는 경우만 고려하고, arr[r][c] 스티커를 뗄 수 있는 이전 위치 (arr[1][c-1] or arr[1][c-2] 혹은 arr[0][c-1] or arr[0][c-2]) 를 부분최적해로 보는 것 이었다. 점화식 r=0인 경우 dp[r][c] = max{dp[1][c-1], dp[1][c..

🥇코딩테스트:Algorithm

bfs 방문체크 위치

백준 문제를 풀다 메모리 초과를 만남.. 분명 다른사람 코드와 같은데, 왜 메모리 초과가 나는지 이상했다. 이유는 bfs 방문체크 위치를 잘 못 해서 결론 : 큐에 삽입하는 순간에 방문체킹을 해서 중복을 방지하자 잘못된 방문체크 위치 (큐를 뽑는 순간 방문체크) 아래 코드는 문제에 사용된 bfs함수 일부분입니다 static boolean move(){ Queue tmp = new LinkedList(); while(!bq.isEmpty()){ int[] c = bq.poll(); int cr = c[0], cc=c[1]; if(cr==er && cc == ec){ return true; } chk[c[0]][c[1]]=true; // 방문체크 for(int d=0;d

💎백엔드 : Backend

[SpringBoot 하며 마주친 오류] Transaction silently rolled back because it has been marked as rollback-only

프로젝트를 하던 중, 잘 되던 api에서 Transaction silently rolled back because it has been marked as rollback-only 라는 에러를 마주하고 해결하며 알게된 내용을 기록하였습니다. 1. 비즈니스 로직에서 무성의한 예외처리를 하지 말자 1-1) 예외 블랙홀이 발생할 수 있다. 예외가 발생해도 예외를 흡수해버리고 다음 로직이 수행될 수 있다. try{ }catch(IOException e){ // 예외 블랙홀 } 위 코드에서 IOException이 발생한 경우를 try/catch로 감싸면 다음 로직이 정상 수행된다. 비즈니스로직이 정상 수행되었다고 착각할 수 있고, 버그를 발생시킬 수 있다. 1-2) 무성의한 throws를 할 수 있다. 하위 메소드..

💾ORM:JPA

[spring-data-jpa] 반환타입

컬렉션 타입 결과값이 없는 경우 빈 컬렉션을 반환해준다. (null을 반환하지 않음!) 따라서 !=null 과 같은 처리를 해줄 필요가 없다. 단건 조회 결과값이 없는 경우 null을 반환한다 (순수한 jpa의 경우 javax.persistence.NoResultException 예외 발생) 결과가 2건 이상인 경우 javax.persistence.NonUniqueResultException 예외 발생

mc.thd
'분류 전체보기' 카테고리의 글 목록 (7 Page)