일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 자바
- 매개변수 탐색
- git
- 완전탐색
- Mendix
- algorithm
- Recursion
- 가중치없는그래프
- 프로그래머스
- microflow
- 집합
- 이분탐색
- 정렬
- dfs
- lcap
- 반효경교수님
- 멘딕스
- Bruteforce
- 해시맵
- MySQL
- 스택
- domain model
- 트리
- SQL
- 그래프
- Sort
- 재귀
- 알고리즘
- 백트래킹
- 자료구조
- Today
- Total
목록전체 글 (144)
mondegreen
커서가 이동하기 위해서는 스택을 두개 사용하는 것이 필요할 것 같았다. 커서를 기준으로 왼쪽과 오른쪽 스택을 별도로 구현하고 커서를 기준으로 양쪽으로 이동시켜주면 된다. 커서 이동과 삭제 시마다 스택이 비어있는지 확인하는 것은 필수이고 커서가 중간에 위치한채로 입력이 끝날 수 있기 때문에 오른쪽 스택에 존재하는 값을 왼쪽으로 모두 옮겨준 후에 stringbuilder로 문자열화해주고 역순으로 처리해주면 된다. package BaekJoon.stack; import java.util.ArrayDeque; import java.util.Deque; import java.util.Scanner; public class BJ5397 { public static void main(String[] args) { S..
[Part2-Chapter02-Clip04] -백준 2504 괄호의 값 짝이 되는 괄호를 if 문으로 복잡하게 쓰지 않기 위해 map에 담아서 짝을 맞추도록 했고 소괄호와 대괄호를 2와 3으로 매칭시키는 것도 map을 활용했다. 값을 넣을 때마다 최근 넣은 값을 저장한다. 괄호가 열릴 때마다 곱을 해주고 닫힐 때마다 다시 해당하는 수로 나누어서 결과값을 갱신시키는 방식으로 풀이했다. 가장 먼저 예외처리할 부분은 괄호가 짝이 맞도록 닫히지 않는다면 0을 반환해야 한다. 따라서 일단 입력값의 길이가 홀수라면 바로 0을 반환하고, stack을 활용해 괄호가 잘 닫히고 있는지도 확인하여 스택에 남은 값이 있다면 0을 반환하도록 구현했다. 여는괄호인 경우 스택에 담아주고 해당하는 숫자를 곱해준다. 닫는 괄호인 경..
동일한 숫자는 카운트하지 않기 때문에 set을 활용해야겠다고 판단했다. 숫자를 고르는 방법은 특정 인덱스를 기준으로 뒤의 숫자만 고르게 하려고 했었다. 그런데 이렇게 처리하게되면 뽑은 숫자마다 순서를 직접 달리 배치해봐야 하는 번거로움이 발생한다. 따라서 방문 배열을 생성하고 해당 숫자를 뽑았는지를 체크하며 고르고 모든 인덱스를 순회하도록 처리했다. 이렇게 처리하면 모든 숫자를 순회하는 대신 뽑은 숫자 간의 숫자를 바꿔서 배치할 필요가 없다. k개의 카드만 뽑아야 하므로 cnt 변수로 뽑은 숫자를 관리했다. package BaekJoon.backtracking; import java.util.Arrays; import java.util.HashSet; import java.util.Scanner; pub..
재귀..재귀..진짜 왜 재귀적 머리가 안 돌아가는지.. 한참 고민하고 푼 문제이다. 일단 타겟을 찾는 것보다 어쨋든 답이 나오는 문제라면 빼주어야 하는 값을 찾기로 한다. 오래 걸린 부분은 현재 이 숫자를 선택하느냐 마느냐라는 부분을 어떤 방식으로 구현하는 것인지였다. 아래와 같이 선택 여부에 따라 dfs를 나누어 실행해주고 만약 더한 값이 찾고자 하는 값보다 크면 바로 return해 버리는 방식으로 구현했다. class Solution { private static int find, answer; public int solution(int[] numbers, int target) { answer = 0; int total = 0; for(int i =0; i find) return; if(thisNum..
그래프 너무 어렵지만.. 가중치가 없는 그래프이니까 다익스트라 제외, 최단경로가 아니라 어디까지 이어져 있는지가 중요하니까 BFS가 아닌 DFS로 구현하기로 결정했다. 보통은 두개의 트리로 분리되어 있는 송전탑을 하나의 트리로 연결시키라고 하면 너무...정말... 유니온파인드 써서 쉽게 처리하겠지만 이건 반대로 한개를 두개로 나누라고 하니 풀이방법을 찾지 못했다. 아래는 책을 참고해서 푼 로직이다. 답인 answer는 최대값인 n-1로 설정한다. 그 이유는 다른 한쪽이 한 개의 송전탑으로 이루어진 경우에 가장 큰 차이를 가지는 때이므로 n-1로 초기화해준다. DFS부분이 문제인데 송전탑을 하나씩 연결해가면서 나머지 송전탑 무리들과의 차이를 최솟값으로 갱신해나간다. 그래서 현재 송전탑이 연결된 것으로 가정..
가중치가 있는 그래프 문제이다. 다익스트라 알고리즘을 활용해야 하므로 우선순위 큐로 구현해야 한다. 이 때 delivery라는 클래스는 정렬 기준을 선언해줘야 한다. 주의할 점은 무방향 그래프이기 때문에 인접리스트에 양방향으로 값을 넣어줘야 한다. 오랜만이다 다익스트라..!ㅎ import java.util.*; class Solution { public static class delivery{ int dest; int time; public delivery(int x, int y){ this.dest = x; this.time = y; } } public int solution(int N, int[][] road, int K) { int answer = 0; int [] dist = new int[N+1..
import java.util.*; class Solution { public static Deque dq; public static int dist[][]; public static int n, m; public static class Position{ int r; int c; public Position(int x, int y){ this.r = x; this.c = y; } } public int solution(int[][] maps) { int answer = -1; n = maps.length; m = maps[0].length; dist = new int[n][m]; dist[0][0] = 1; dq = new ArrayDeque(); dq.add(new Position(0, 0)); int..
최소 비용을 구하는 문제이다. 먼저 각 섬의 루트노드를 저장할 배열을 선언한다. 이 때 초기 값은 각자의 인덱스 값이다. 즉, 각자가 루트노드인 것이고 각자의 집합에 속해있는 것이다. 그 다음 건설 비용이 적은 순서대로 먼저 정렬해준 후 순서대로 연결을 해본다. 이 때 연결하기 전 두 섬의 연결되어 있는지는 루트 노드를 찾아서 비교한다. 만약 다르다면 다리 연결에 드는 비용을 정답 변수에 더해주고 유니언 메소드를 통해 한쪽 루트노드를 다른 한 쪽으로 변경해서 합쳐준다. 같을 때 다리를 놓는다면 사이클이 생겨 비효율적이고 최소 비용이 될 수 없다. 이 작업을 반복하며 다리의 갯수가 n-1개 일 때 작업을 완료하면 된다. n개를 연결하는 최소 갯수는 n-1개 이기 때문이다. import java.util.*..
import java.util.*; class Solution { public static int[] answer = {-1, -1}; public int[] solution(int n, String[] words) { HashSet set = new HashSet(); char lastLetter= '-'; for(int i = 0; i
1. 상품별 오프라인 매출 구하기[문제] 1) PRODUCT 테이블과 OFFLINE_SALE 테이블에서 2) 상품코드 별 매출액3) (판매가 * 판매량) 4) 합계를 출력하는 SQL문을 작성해주세요. 결과는 5)매출액을 기준으로 내림차순 정렬해주시고 매출액이 같다면 상품코드를 기준으로 오름차순 정렬해주세요. 1) 두 테이블 간 동일한 컬럼은 PRODUCT_ID가 존재하므로 이 컬럼을 기준으로 이너조인해준다.2) 상품코드별로 산출해야 하기 때문에 상품 코드를 동일한 코드끼리 그룹으로 묶어준다.3) 매출액을 구해야 하는 문제이기 때문에 판매가와 판매량을 곱하고4) 곱한 값을 가진 각 행을 집계함수로 묶인 하나의 상품코드에서 하나의 행으로 나타내주기 위해 SUM 처리해준다.5) 매출액으로 내림차순 정렬한 후 ..