Day81

강태훈·2026년 4월 27일

nbcamp TIL

목록 보기
81/97

알고리즘 코드카타

Immediate Food Delivery II

with deliveries as (
    select *
    FROM Delivery d1
    WHERE order_date = (
        SELECT MIN(order_date)
        FROM Delivery d2
        WHERE d2.customer_id = d1.customer_id
    )
)

select round(avg(case when order_date = customer_pref_delivery_date then 1 else 0 end) * 100, 2) as immediate_percentage
from deliveries
;
WITH ranked AS (
    SELECT *,
           ROW_NUMBER() OVER (PARTITION BY customer_id ORDER BY order_date) AS rn
    FROM Delivery
)

SELECT ROUND(
    AVG(CASE 
        WHEN order_date = customer_pref_delivery_date THEN 1 
        ELSE 0 
    END), 2
) AS immediate_percentage
FROM ranked
WHERE rn = 1;

윈도우 함수 사용한 해답

  • ROW_NUMBER(): 행 번호 매기기 (여기선 rn이 행 번호)
  • PARTITION BY: 그룹 나누기 (GROUP BY랑 비슷하지만 다름)
    • 파티션 그룹 내에서 정렬이 가능

햄버거 만들기

import java.util.ArrayList;
import java.util.List;

class Solution {
    public int solution(int[] ingredient) {
        int answer = 0;

        List<Integer> workbench = new ArrayList<>();

        for (int ing : ingredient) {
            workbench.add(ing);

            if (workbench.size() >= 4) {
                int size = workbench.size();
                if (workbench.get(size - 4) == 1
                        && workbench.get(size - 3) == 2
                        && workbench.get(size - 2) == 3
                        && workbench.get(size - 1) == 1) {

                    answer++;

                    workbench.remove(size - 1);
                    workbench.remove(size - 2);
                    workbench.remove(size - 3);
                    workbench.remove(size - 4);
                }
            }
        }

        return answer;
    }
}

0개의 댓글