목록분류 전체보기 (211)
Hansel
WHERE 조건 select empno, ename from emp where job LIKE '%SALESMAN' order by sal desc, empno 장씨성을 가진 선수 select p.player_name, p.position, p.join_yyyy, p.back_no from player p where p.player_name like '장%' 기본 JOIN select empno, ename, sal, dname from emp join dept on dept.deptno=emp.deptno where loc='DALLAS'; = 같은 버전 natural join select empno, ename, sal, dname from emp natural join dept where loc='..

단순한 다익스트라지만 특정 정점을 지나야 한다는 조건 때문에 조금 까다로웠다. v1과 v2를 지나야 한다고 할때 결국 시작 정점에서 Start → v1 → v2 → 도착 혹은 Start → v2 → v1 → 도착 의 루트 중 최단거리를 고르면 되는 문제이다. package Feb_2022; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.Arrays; import java.util.PriorityQueue; import java.util.StringTokenizer; public class Boj_1504 {..

약간 bfs와 유사한 느낌의 다익스트라를 해주면 된다! 너비우선으로 나가는 방식이 아니라 bfs는 절대 아니지만 네 방향으로 가는 방식으로 인해 그러한 느낌이 들었다. package Feb_2022; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.PriorityQueue; import java.util.StringTokenizer; public class Boj_4485 { public static class Point implements Comparable{ int y; int x; int score; public Point(int y, int x, in..

우선 벽돌을 밑면의 넓이 순으로 정렬을 시킨다. 그 후 1번 벽돌부터 내 아래에 올 수 있는 벽돌이 무엇인가를 찾으며 높이를 갱신해주면 된다. 현재 선택된 벽돌보다 무거운 벽돌을 찾으면 되는데 무게가 높은 것이 여러개일 경우가 많을 것이다. 따라서 단순히 무게가 높다고 선택하는게 아닌 그 중에서도 높이가 가장 최대가 되는 것을 찾아 dp배열의 높이를 계속해서 갱신해주면 된다. 그렇게 최대 높이를 찾았다면 그 높이를 이용해 기존의 벽돌 배열을 역추적해 어떤 벽돌이 선택되었는지를 찾아주면 된다. Bricks 배열의 toString은 디버깅 때문에 썼다. package Feb_2022; import java.io.BufferedReader; import java.io.IOException; import jav..
스프링의 기본 빈 등록 방식은 싱글톤으로 작동한다. public class MemberApp { public static void main(String[] args) { // AppConfig appConfig = new AppConfig(); // MemberService memberService = appConfig.memberService(); // MemberService memberService = new MemberServiceImpl(); ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class); MemberService memberService = applicationConte..
클래스 인스턴스가 딱 1개만 생성하는것을 보장하는 디자인 패턴 package hello.core.singleton; public class SingletonService { private static final SingletonService instance = new SingletonService(); //자기 자신을 가진다. 스태틱으로 => 단 1개만 존재하게 된다. //스태틱 영역에서 미리 생성해둔다. //조회시 사용 public static SingletonService getInstance(){ return instance; //항상 같은 인스턴스 반환함 } //프라이빗 생성자 //외부에서 생성을 막는다. 프라이빗 생성자 private SingletonService(){ } public void ..

세그먼트 트리는 구간의 합을 구해야 할때 많이 쓰인다. 단순히 구간의 합을 구한다면 DP나 투 포인터로 구할 수 있겠지만 세그먼트 트리를 사용하는 조건에는 그 구간의 값이 갑자기 변경이 될 경우도 고려한다. 만약 1번부터 N번까지의 합을 구해야 하는데 단순한 배열과 반복문을 이용한다면 O(N)이 소요될 것이다. 하지만 특정 구간의 값이 변경되었고 그로 인한 합이 다시 필요하다면? 그 구간을 변경하고 다시 O(N)만큼의 연산이 필요해진다. 이는 너무 비효율적인데 세그먼트 트리를 이용한다면 O(logN)의 연산으로 구할 수 있다. 기본적인 트리의 구성은 다음과 같다. 우선 세그먼트 트리는 완전 이진트리인 경우에 가능하다. 루트 노드의 1-8은 1번부터 8번을 담당하며 그 아래 1번은 1번 노드, 즉 루트 노..

세그먼트 트리를 이용하여 구할 수 있는 문제이다. 교차하는 선은 자신보다 오른쪽에 있는 선이 몇개인가를 찾으면 된다. 처음 132를 그었을땐 아무것도 없으니 넘어가고 392를 그으면 자신보다 오른쪽에 있는 132에 선이 그어져 있으니 +1 311을 그으면 오른쪽에 아무것도 없으니 넘어가고 351은 오른쪽에 132, 311 두개가 그어져 있으니 +2 231은 없으니 넘어간다. 그러면 총 3개의 선이 교차해 있음을 알 수 있다. 우선 예시로 주어진 392,351,132,311,231 을 세그먼트 트리의 leaf에 위치시킨다. 그 후 입력의 A의 번호들을 차례대로 탐색하며 탐색을 할 때 마다 해당 위치에 1을 더해준다. 하지만 번호들이 1,2,3와 같은 일정한 순서의 정수가 아닌 무작위의 정수가 주어진다. 따..

기본적인 dfs&bfs 문제이다. bfs는 큐, dfs는 재귀라는 정석적인 방법으로 풀면 그냥 풀린다. package Feb_2022; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.*; public class Boj_1260 { static int N; static int M; static int V; static boolean visit[]; static int[][] arr; public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(..

https://www.acmicpc.net/problem/7569 7569번: 토마토 첫 줄에는 상자의 크기를 나타내는 두 정수 M,N과 쌓아올려지는 상자의 수를 나타내는 H가 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M ≤ 100, 2 ≤ N ≤ 100, www.acmicpc.net 이 문제는 단순한 BFS 문제이다. 토마토는 상하좌우 그리고 앞 뒤 칸에 있는 토마토에 영향을 미쳐 토마토를 익게한다. 단순히 BFS를 활용해 익어가는 날짜만큼 더해주면 최종값의 -1은 결국 가장 마지막으로 익는 토마토의 일수가 된다. 아래의 코드는 처음 시도했던 코드이다. package practice; import java.io.BufferedReader; import ..