일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 집합
- 그래프
- 트리
- 반효경교수님
- 백트래킹
- microflow
- MySQL
- 자료구조
- 프로그래머스
- 재귀
- Recursion
- 정렬
- lcap
- 알고리즘
- 멘딕스
- Bruteforce
- SQL
- git
- algorithm
- 이분탐색
- Sort
- 완전탐색
- 가중치없는그래프
- 스택
- domain model
- dfs
- 해시맵
- 매개변수 탐색
- 자바
- Mendix
- Today
- Total
목록프로그래머스 (25)
mondegreen
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cNgLdP/btsGe8c9d6b/gHYB8KRjkrFNrbGFZNexck/img.png)
가중치가 있는 그래프 문제이다. 다익스트라 알고리즘을 활용해야 하므로 우선순위 큐로 구현해야 한다. 이 때 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..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/pOVXt/btsGd1xDiyX/iiJXbl2j1FzmwktcsJc720/img.png)
최소 비용을 구하는 문제이다. 먼저 각 섬의 루트노드를 저장할 배열을 선언한다. 이 때 초기 값은 각자의 인덱스 값이다. 즉, 각자가 루트노드인 것이고 각자의 집합에 속해있는 것이다. 그 다음 건설 비용이 적은 순서대로 먼저 정렬해준 후 순서대로 연결을 해본다. 이 때 연결하기 전 두 섬의 연결되어 있는지는 루트 노드를 찾아서 비교한다. 만약 다르다면 다리 연결에 드는 비용을 정답 변수에 더해주고 유니언 메소드를 통해 한쪽 루트노드를 다른 한 쪽으로 변경해서 합쳐준다. 같을 때 다리를 놓는다면 사이클이 생겨 비효율적이고 최소 비용이 될 수 없다. 이 작업을 반복하며 다리의 갯수가 n-1개 일 때 작업을 완료하면 된다. n개를 연결하는 최소 갯수는 n-1개 이기 때문이다. import java.util.*..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/VeQRu/btsGezmYDci/SCfjKtL1ocJnK7SELOskM0/img.png)
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) 매출액으로 내림차순 정렬한 후 ..
1. 월별 잡은 물고기 수 구하기1) 집계 함수를 사용한 뒤에는 WHERE 절을 사용할 수 없고 대신 HAVING 절을 사용해야 한다.SELECT COUNT(ID) AS FISH_COUNT, MONTH(TIME) AS MONTHFROM FISH_INFOGROUP BY MONTHHAVING COUNT(ID) > 0ORDER BY 22. 물고기 종류 별 잡은 수 구하기1) SELECT 문에서 FISH_NAME을 사용하고 싶다면 GROUP BY 함수에서 같이 집계해줘야 한다..SELECT COUNT(ID) AS FISH_COUNT, FISH_NAMEFROM FISH_INFOINNER JOIN FISH_NAME_INFO USING (FISH_TYPE)GROUP BY FISH_TYPE, FISH_NAMEORDER..
1. 가장 비싼 상품 구하기SELECT MAX(PRICE) AS MAX_PRICEFROM PRODUCT2. 최댓값 구하기SELECT MAX(DATETIME) AS 시간 FROM ANIMAL_INS3. 잡은 물고기 중 가장 큰 물고기의 길이 구하기1) 추출한 데이터에 문자열 형식으로 특정 단어를 덧붙여주려면 CONCAT를 활용하면 된다.SELECT CONCAT(MAX(LENGTH),'cm') AS MAX_LENGTH FROM FISH_INFO4. 가격이 제일 비싼 식품의 정보 출력하기SELECT * FROM FOOD_PRODUCTWHERE PRICE = (SELECT MAX(PRICE) FROM FOOD_PRODUCT)SELECT * FROM FOOD_PRODUCTORDER BY PRICE DESCLIMI..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bYTkhC/btsF9B7C1Jm/PvKcLJuL3kOUZyTAAMbXUK/img.png)
import java.util.*; class Solution { public static int [] answer; public static HashMap chain; public static HashMap order; public int[] solution(String[] enroll, String[] referral, String[] seller, int[] amount) { answer = new int[enroll.length]; chain = new HashMap(); order = new HashMap(); for(int i =0; i
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/pDk7p/btsF9eSloWb/euOSstBjvo9QOACvqpiE30/img.png)
class Solution{ public int solution(int n, int a, int b) { int answer = 0; // 트리로 구현했을 때 1라운드의 위치를 인덱스로 두고(리프노드) // /2를 해가며 부모노드가 같아졌을 때 만나는 것으로 판정 // /2한 횟수가 지나 온 라운드 수 a = a+n-1; b = b+n-1; while(a!=b){ a /=2; b /=2; answer++; } return answer; } }
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cF9Q0a/btsF7QX6GAe/jvXySR21kUkhUZWe0BTCv0/img.png)
동명이인이 있다는 지시문에 key 값으로 이름을 활용하지 못할 것이라고 생각했다. 그래서 각 배열을 정렬한 후 완주한 배열의 인덱스와 참가한 인덱스의 이름이 서로 맞지 않는다면 그 친구가 낙오한 것이기 때문에 완주한 친구들을 맵에서 지워가면서 확인했다. 정렬을 해야한다는 단점이 존재했다. import java.util.*; class Solution { public String solution(String[] participant, String[] completion) { String answer = ""; Arrays.sort(participant); Arrays.sort(completion); HashMap completed = new HashMap(); for(int i = 0; i< complet..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/LZXfr/btsF8aAjvW1/TpFo58X5rcMSyOy62PDB21/img.png)
구하고자 하는 것은 특정일자의 가격을 기준으로 가격이 떨어진 날까지의 기간이므로 그 날짜들을 구분할 수 있는 인덱스를 가지고 활용해야 한다. 따라서 스택에 들어갈 값은 배열의 인덱스이다. 여기서 스택을 활용할 수 있다고 생각하게 되는 지점은 앞으로의 주식 가격이 아닌 이전 주식가격들과 비교해서 기간을 구한다는 점이다. 따라서 현재 주식 가격보다 가장 최근 주식 가격이 더 높다면 해당 가격을 가진 날짜는 하루 동안 떨어지지 않은 것이고 해당 날짜를 스택에서 제거한다. 정답 배열에 값을 넣을 때는 제거될 스택의 값이 더 이상 고려되지 않아도 되는 값이고 구간이 정해지는 값이므로 제거될 스택의 값을 정답 배열의 인덱스로 잡고 현재 넣고자 하는 인덱스와의 차를 구해 기간을 담으면 된다. 그리고 또 다시 가장 최..