분류 전체보기
-
Spring Controller의 StatelessSpring(Web) 2022. 7. 7. 17:42
예전에 공부한 Spring Controller에서 쓴 내용이 잘못 됐다는것을 발견했다. https://tmpfactory.tistory.com/39?category=932695 Spring 완전정복 - 1 / Controller Spring에서 페이지를 띄우는 여러 방법 1. 정적 페이지, MVC와 템플릿 엔진 위 그림과 같이 동작하는데, 각각의 경우에 따라 다르게 동작한다. 정적 페이지를 호출 할 경우 -> http://localhost:8080/hello.htm tmpfactory.tistory.com 문제가 된 것은 이 부분이다. Spring Bean은 싱글톤 형식으로 Spring Container에 담겨져 있다는걸 공부하고 있을 때, 이러한 싱글톤 객체에는 필드를 가지고 있어서는 안 된다는것을 알..
-
leetcode - CheckCompletenessofBinaryTreeAlgorithm 2022. 6. 25. 18:27
주어진 이진트리가 완전 이진 트리인지 확인하는 문제이다. 알고리즘은 BFS 탐색을 이용해 풀었다. BFS 탐색을 진행하면서, left나 right가 null이더라도 null Node를 탐색한것처럼 배열에 넣어 완전 이진트리인지 검사했다. 완전 이진트리이기 위해서는, BFS 탐색을 진행했을 때 null 노드를 방문했다면 앞으로 방문 할 노드들은 모두 null 노드이어야 한다. 위의 예시는 완전 이진 트리가 아닌 경우인데, NULL 노드도 방문한다고 가정한 후(단말 노드의 자식 노드라면 방문하지 않는다.) BFS 탐색을 해보면, 1 -> 2 -> 3 -> 4 -> 5 -> NULL -> 7 과 같은 형태로 방문하게 된다. 이렇게 NULL 노드를 방문했다면 그 다음으로 방문 할 모든 노드들은 NULL이어야 완..
-
leetcode - LongestArithmeticSubsequence (등차수열)Algorithm 2022. 6. 25. 17:21
가장 긴 등차수열의 길이를 구하는 문제이다. 처음에는 dfs 형태로 구현을 했는데, 이상하게도 특정 테스트 케이스에서만 무한루프가 돌아 문제점을 찾지 못한 채 멈췄었다. rnum의 최대길이는 1000이기 때문에, 내가 예상한 반복 회수는 최악일 때 500500번이였다. 이 정도는 0.1초도 되지 않을 텐데, 현재 rnum에 들어가 있는 특정 케이스에서만 무한루프가 도는 상태이다. dfs이긴 하지만 한 숫자를 선택하면 그 다음 인덱스부터 탐색을 진행하기 때문에, 따로 boolean 배열은 쓰지 않았다. package leetcode; public class LongestArithmeticSubsequence { static int answer = 0; static int[] rnum = new int[]{..
-
Spring 핵심 원리 3 - 싱글톤 패턴과 스프링 컨테이너Spring(Web) 2022. 6. 24. 19:35
스프링은 필요한 메소드들을 스프링 컨테이너에 빈 형태로 관리하게 되는데, 그 동안 DIP(Dependency Inversion Principle)를 지키기위해 AppConfig이라는 Config 파일을 만들어두어, 스프링 빈으로 등록해서 사용해왔다. 코드만 보면, memberRepository() 메소드가 총 3번 실행된다. 1. memberService()에서 2. memberRepository()를 Bean에 등록 할 때 3. orderService() 하지만, 실제로 테스트를 돌려보면 각각의 메소드는 한 번만 실행된다. package hello.core; import hello.core.discount.DiscountPolicy; import hello.core.discount.RateDiscoun..
-
Geeksforgeeks - InsertSortedListAlgorithm 2022. 6. 24. 17:22
이미 정렬된 LinkedList에, 정렬을 유지한 채로 값을 넣는 문제다. Example 1: Input: LinkedList: 25->36->47->58->69->80 data: 19 Output: 19 25 36 47 58 69 80 Example 2: Input: LinkedList: 50->100 data: 75 Output: 50 75 100 총 경우의 수는 3개이다. 1. new node가 head node가 되는 경우 head 노드가 null인 경우 현재 연결 리스트에 노드가 한 개도 없는 상태이므로, key값을 이용해 새로운 노드를 만든 후 head노드로 만들어준다. 리스트에 넣을 key값이 head 노드의 값보다 작을 경우 head 노드가 null인 경우와 같이, 새롭게 만든 node가 ..
-
Geeksforgeeks - Dijkstra 알고리즘Algorithm 2022. 6. 24. 16:45
https://www.geeksforgeeks.org/top-10-algorithms-in-interview-questions/#algo1 Top 10 algorithms in Interview Questions - GeeksforGeeks Top 10 algorithms in Interview Questions www.geeksforgeeks.org 매번 문제를 풀 때 마다 한 번씩 실수하는 알고리즘들을, 다시 한 번 구현해보며 각각을 정리하고 있다. BFS와 DFS는 어렵지 않게 구현해서 따로 작성하지는 않았지만, 다익스트라는 헤맸던 부분이 생겨 정리하게 되었다. BFS, DFS와 Dijkstra의 차이점은, 다음 노드로 가기위한 가중치이다. BFS, DFS -> 다음 노드로 가기위한 가중치는 모두 ..
-
LeetCode - Path with Maximum goldAlgorithm 2022. 6. 20. 19:19
간단한 탐색 문제였지만, bfs로 풀려다가 각각의 순회마다 따로 visited를 빼줘야하는 부분에서 애를 먹었던 문제. 역시 이런 탐색 문제는 dfs + 백트래킹 방식이 제일 구현도 쉽고 확실하게 맞을 수 있는 방법인것 같다. 기본적인 4방향 탐색 문제 중 가장 무난한 문제였다. package leetcode; import java.util.*; class GoldMine { static class Cord { int x; int y; int gold; Cord (int x, int y, int gold) { this.x = x; this.y = y; this.gold = gold; } } static int[][] arr; static int[] dx = {0, 0, 1, -1}; static int[..
-
2580 - 스도쿠Baekjoon 2022. 5. 30. 13:59
생각한것들 간단한 백트래킹 문제였다. 백트래킹 체크 부분도 그다지 어렵지 않았는데.. 자그마한 실수 때문에 풀이 시간이 정말 많이 늘어났던 문제다. 실수 백트래킹 체크 부분을 지난 후, 버려야 할 분기임에도 다음 좌표로 넘어가게되어 무한루프에 빠지는 경우가 생겼다. 0인 칸에 1~9까지의 가능한 숫자들을 넣어보고(반복문) 가능한 숫자가 존재하지 않으면 반복문을 종료해야하는데, 2중 반복문인것을 간과하고 한 개의 반복문만 종료시킨게 실수였다. 문제 풀이 간단하게, 9*9 map을 돌면서 0인칸이 나오면 숫자가 들어가있지않은 칸이기 때문에, 1~9까지 넣어보며 가능한 값을 찾는다. 가능한 값이 존재하지 않을 경우, 해당 분기를 버린다. package backjoon; import java.io.*; impo..