TIL(Today I Learned)_데일리루틴_24.11.23.Sat

728x90

데일리루틴 SQL

MySQL 즐겨찾기가 가장 많은 식당 정보 출력하기 정답입니다.

SELECT FOOD_TYPE, REST_ID, REST_NAME, FAVORITES
FROM REST_INFO
WHERE (FOOD_TYPE, FAVORITES) IN (
    SELECT FOOD_TYPE, MAX(FAVORITES)
    FROM REST_INFO
    GROUP BY FOOD_TYPE
)
ORDER BY FOOD_TYPE DESC

 

  • SELECT FOOD_TYPE, REST_ID, REST_NAME, FAVORITES
    • REST_INFO 테이블에서 FOOD_TYPE(음식 유형), REST_ID(식당 ID), REST_NAME(식당 이름), FAVORITES(즐겨찾기 수) 컬럼을 선택합니다.
  • FROM REST_INFO
    • 데이터를 가져올 대상 테이블을 지정합니다. 여기서는 REST_INFO라는 테이블입니다.
  • WHERE (FOOD_TYPE, FAVORITES) IN (
    • 특정 조건을 만족하는 행만 선택하는 WHERE 절입니다. (FOOD_TYPE, FAVORITES)라는 튜플을 통해 각 음식 유형에 대해 즐겨찾기 수가 최댓값인 경우만을 포함시키는 조건을 설정합니다.
  • SELECT FOOD_TYPE, MAX(FAVORITES)
    • 서브쿼리로 REST_INFO 테이블에서 각 음식 유형(FOOD_TYPE)별로 **가장 많은 즐겨찾기 수(MAX(FAVORITES))**를 찾습니다. 이 서브쿼리는 각 FOOD_TYPE에 대해 최고 즐겨찾기 수를 갖는 값을 반환합니다.
  • FROM REST_INFO
    • 서브쿼리에서도 동일하게 REST_INFO 테이블을 대상으로 사용합니다.
  • GROUP BY FOOD_TYPE
    • 각 FOOD_TYPE별로 그룹을 만들고, 각 그룹에서 MAX(FAVORITES)를 찾습니다. 즉, 음식 유형별로 가장 많은 즐겨찾기 수를 가지는 값을 구하는 역할입니다.
  • ORDER BY FOOD_TYPE DESC
    • 최종 결과를 FOOD_TYPE 기준으로 내림차순(DESC)으로 정렬합니다. 즉, 음식 유형이 알파벳 역순으로 정렬되어 출력됩니다.

 


데일리루틴 알고리즘

Java K번째수 정답입니다.

import java.util.Arrays;

class Solution {
    public int[] solution(int[] array, int[][] commands) {
        int[] answer = new int[commands.length]; // 결과를 저장할 배열
        
        for (int c = 0; c < commands.length; c++) {
            int i = commands[c][0];
            int j = commands[c][1];
            int k = commands[c][2];
            
            // array의 i번째부터 j번째까지 자르기
            int[] slicedArray = Arrays.copyOfRange(array, i - 1, j);
            
            // 자른 배열 정렬
            Arrays.sort(slicedArray);
            
            // 정렬된 배열의 k번째 값 찾기
            answer[c] = slicedArray[k - 1];
        }
        
        return answer;
    }
}

 

  • 입력 배열 초기화:
    • answer 배열을 commands.length 크기로 초기화합니다. 이는 각 명령의 결과를 저장합니다.
  • 명령 순회:
    • commands 배열의 각 원소에 대해 i, j, k 값을 추출합니다.
    • i와 j는 1부터 시작하는 인덱스이므로, Arrays.copyOfRange를 사용할 때 i-1을 시작 인덱스로 설정합니다.
  • 배열 슬라이싱 및 정렬:
    • Arrays.copyOfRange 메서드를 사용하여 주어진 범위 [i-1, j)의 배열을 자릅니다.
    • 자른 배열을 Arrays.sort 메서드로 정렬합니다.
  • k번째 값 찾기:
    • 정렬된 배열에서 k-1 번째 값을 찾아 answer 배열에 저장합니다.
  • 결과 반환:
    • 최종적으로 answer 배열을 반환합니다.

 

728x90
반응형
LIST