728x90
데일리루틴 SQL
MySQL 재구매가 일어난 상품과 회원 리스트 구하기 정답입니다.
SELECT USER_ID, PRODUCT_ID
FROM ONLINE_SALE
GROUP BY USER_ID, PRODUCT_ID
HAVING COUNT(*) > 1
ORDER BY USER_ID ASC, PRODUCT_ID DESC
- GROUP BY USER_ID, PRODUCT_ID:
- USER_ID와 PRODUCT_ID를 기준으로 그룹화하여 같은 회원이 같은 상품을 구매한 내역을 묶습니다.
- HAVING COUNT(*) > 1:
- 그룹화된 데이터 중에서 해당 회원이 동일한 상품을 두 번 이상 구매한 경우만 선택합니다.
- ORDER BY USER_ID ASC, PRODUCT_ID DESC:
- 결과를 회원 ID를 기준으로 오름차순 정렬하고, 회원 ID가 같은 경우 상품 ID를 기준으로 내림차순 정렬합니다.
데일리루틴 알고리즘
Java 명예의 전당 정답입니다.
import java.util.*;
class Solution {
public int[] solution(int k, int[] score) {
// 명예의 전당 점수를 저장할 우선순위 큐 (오름차순 정렬)
PriorityQueue<Integer> hallOfFame = new PriorityQueue<>();
// 매일 발표되는 최하위 점수를 저장할 리스트
List<Integer> dailyMinScores = new ArrayList<>();
for (int s : score) {
// 명예의 전당에 점수 추가
hallOfFame.offer(s);
// 명예의 전당의 크기가 k를 초과하면 가장 낮은 점수를 제거
if (hallOfFame.size() > k) {
hallOfFame.poll();
}
// 현재 명예의 전당에서 최하위 점수를 기록
dailyMinScores.add(hallOfFame.peek());
}
// 리스트를 배열로 변환하여 반환
return dailyMinScores.stream().mapToInt(Integer::intValue).toArray();
}
}
- PriorityQueue:
- 명예의 전당 목록은 항상 상위 k개의 점수를 유지해야 하므로, 우선순위 큐를 사용해 자동으로 정렬합니다.
- PriorityQueue는 기본적으로 오름차순 정렬되므로 최하위 점수는 peek() 메서드로 접근할 수 있습니다.
- 반복문:
- 매일의 점수를 명예의 전당(hallOfFame)에 추가합니다.
- 만약 명예의 전당의 크기가 k를 초과하면 가장 낮은 점수를 제거(poll())합니다.
- 매일 hallOfFame에서 최하위 점수(peek())를 가져와 dailyMinScores에 추가합니다.
- 결과 반환:
- 리스트 dailyMinScores를 배열로 변환하여 반환합니다.
728x90
반응형
LIST
'Sparta > 데일리루틴' 카테고리의 다른 글
TIL(Today I Learned)_데일리루틴_24.11.30.Sat (0) | 2024.11.30 |
---|---|
TIL(Today I Learned)_데일리루틴_24.11.29.Fri (0) | 2024.11.29 |
TIL(Today I Learned)_데일리루틴_24.11.27.Wed (0) | 2024.11.27 |
TIL(Today I Learned)_데일리루틴_24.11.26.Thu (0) | 2024.11.26 |
TIL(Today I Learned)_데일리루틴_24.11.25.Mon (0) | 2024.11.25 |