코딩테스트

[26.01.30 코테(Python/MySQL)]-명예의 전당(1)&식품분류별 가장 비싼 식품의 정보 조회하기

지니248 2026. 1. 30. 12:57

Lv1. 명예의 전당(1) (Python)

링크: https://school.programmers.co.kr/learn/courses/30/lessons/138477?language=python3

 

내가 작성한 코드

def solution(k, score):
    answer = [] # 매일 발표되는 명예의 전당 최하위 점수 저장
    hall = [] # 현재 명예의 전당에 올라 있는 점수들 저장
    
    for s in score:
        hall.append(s) # 오늘 점수를 명예의 전당 후보에 추가
        hall.sort() # 오름차순으로 점수 정렬
        
        if len(hall) > k: # 명예의 전당에는 최대 k개 점수만 유지해야 함
            hall.pop(0) # k개를 초과하면 최하위 점수 제거
            
        answer.append(hall[0]) # 현재 명예의 전당에서의 최하위 점수
        
    return answer

Lv4. 식품분류별 가장 비싼 식품의 정보 조회하기 (MySQL)

링크: https://school.programmers.co.kr/learn/courses/30/lessons/131116?language=mysql

 

내가 작성한 코드

-- 풀이1 (튜플 IN)
SELECT CATEGORY, PRICE AS MAX_PRICE, PRODUCT_NAME
FROM FOOD_PRODUCT
WHERE (CATEGORY, PRICE) IN (SELECT CATEGORY, MAX(PRICE)
                            FROM FOOD_PRODUCT
                            WHERE CATEGORY IN ('과자', '국', '김치', '식용유')
                            GROUP BY CATEGORY)
ORDER BY PRICE DESC;

-- 풀이2 (JOIN)
SELECT F.CATEGORY, M.MAX_PRICE, F.PRODUCT_NAME
FROM FOOD_PRODUCT F
JOIN (SELECT CATEGORY, MAX(PRICE) AS MAX_PRICE -- 서브쿼리: 카테고리별 최고가 구하기
      FROM FOOD_PRODUCT
      WHERE CATEGORY IN ('과자', '국', '김치', '식용유')
      GROUP BY CATEGORY) M
  ON F.CATEGORY = M.CATEGORY
 AND F.PRICE = M.MAX_PRICE
ORDER BY M.MAX_PRICE DESC;

-- 풀이3 (ROW_NUMBER())
-- ROW_NUMBER(): 가격이 같아도 다른 순위를 가짐 (각 분류 별 제일 비싼 식품 하나이므로 ROW_NUMBER()이 적합)
-- PARTITION BY CATEGORY: 카테고리별로 따로 순위를 매김
SELECT CATEGORY, PRICE AS MAX_PRICE, PRODUCT_NAME
FROM (SELECT CATEGORY, PRICE, PRODUCT_NAME, 
             ROW_NUMBER() OVER (PARTITION BY CATEGORY ORDER BY PRICE DESC) AS RN
      FROM FOOD_PRODUCT
      WHERE CATEGORY IN ('과자', '국', '김치', '식용유')) T
WHERE RN = 1
ORDER BY MAX_PRICE DESC;