SQL 코드카타 - 대여횟수가 많은 자동차들의 월별 대여 횟수 구하기
CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서 대여 시작일을 기준으로 2022년 8월부터 2022년 10월까지 총 대여 횟수가 5회 이상인 자동차들에 대해서 해당 기간 동안의 월별 자동차 ID 별 총 대여 횟수(컬럼명: RECORDS) 리스트를 출력하는 SQL문을 작성해주세요. 결과는 월을 기준으로 오름차순 정렬하고, 월이 같다면 자동차 ID를 기준으로 내림차순 정렬해주세요. 특정 월의 총 대여 횟수가 0인 경우에는 결과에서 제외해주세요.
풀이
먼저 대여 시작일을 기준으로 2022-08월부터 2022-10월까지 총 대여횟수가 5회 이상인 자동차들을 구한다.
그 다음 해당 기간동안의 월별 자동차 ID 별 총 대여 횟수 리스트를 출력하고,
대여 시작일이 2022-08월부터 2022-10월인 자동차 중 위에서 구한 서브쿼리에 해당하는 행을 구하여
group by로 월별, 자동차 ID별로 묶고 문제에서 요구 한 것 처럼
ODER BY 월별 오름차순, CAR_ID 내림차순으로 정렬을해준다.
select MONTH(START_DATE) as MONTH,
CAR_ID,
count(*) RECODS
from CAR_RENTAL_COMPANY_RENTAL_HISTORY
where CAR_ID in(
SELECT CAR_ID
from CAR_RENTAL_COMPANY_RENTAL_HISTORY
where START_DATE between '2022-08-01' and '2022-10-31'
group by CAR_ID
having count(*) > 4
order by START_DATE
) and START_DATE between '2022-08-01' and '2022-10-31'
group by 1, 2
order by 1, 2 desc
알고리즘 코드카타 - 제일 작은 수 제거하기
문제
정수를 저장한 배열 arr에서 가장 작은수를 제거한 배열을 리턴하는 함수, solution을 완성해주세요.
단, 리턴하려는 배열이 빈 배열인 경우엔 배열을 -1을 채워 리턴하세요.
입출력 예
arr | return |
[4,3,2,1] | [4,3,2] |
[10] | [-1] |
코드
class Solution {
public int[] solution(int[] arr) {
// 맨 처음 if문으로 arr의 배열길이가 1인지 확인하고 1이라면
// 배열의 0번째 인덱스에 -1을 넣고 리턴해준다.
if(arr.length == 1){
arr[0] = -1;
return arr;
}
int min = 0;
// min에 0을 저장한 후
// arr에 0번째 인덱스부터 돌며 지금의 값보다 작은 값이 있다면
// min에 그 값의 인덱스 번호를 넣는다.
for(int i = 0; i < arr.length; i++){
if(arr[min] > arr[i]){
min = i;
}
}
//answer에는 arr배열에서 제일 작은 값을 빼고 넣어 줄 것이기 때문에
// arr 배열의 길이에서 1만큼 뺀 배열 길이를 할당
int [] answer = new int [arr.length-1];
int idx = 0;
// for문을 돌면서 아까 min에 집어넣은 인덱스 번호의 값은
// 제일 작은 값의 인덱스 번호이기 때문에
// min과 일치하지 않는 값들만 answer[]에 담는다.
for(int i = 0; i < arr.length; i++){
if(arr[min] != arr[i]){
answer[idx++] = arr[i];
}
}
return answer;
}
}
'프로그래머스' 카테고리의 다른 글
프로그래머스 - 최댓값과 최솟값 (0) | 2024.10.28 |
---|---|
[TIL] 9월 24일 (0) | 2024.09.24 |
[TIL] 9월 23일 (4) | 2024.09.23 |
[TIL] 9월 20일 (1) | 2024.09.20 |
[TIL] 9월 11일 (0) | 2024.09.11 |