프로그래머스 - 연도별 대장균 크기의 편차 구하기

윤민선·2026년 7월 3일

프로그래머스

목록 보기
33/75

문제 설명

ECOLI_DATA 테이블에서 연도별 대장균 크기의 편차(연도별 최대 크기 - 자신의 크기)를 구하는 문제이다. 연도 오름차순으로 정렬하고, 같은 연도 내에서는 편차 오름차순으로 정렬한다.

테이블주요 컬럼
ECOLI_DATAID, PARENT_ID, SIZE_OF_COLONY, DIFFERENTIATION_DATE, GENOTYPE

접근 방법

문제를 읽고 아래 3단계로 풀이 흐름을 정리하였다.

1단계 - 연도별 최대 크기 구하기

YEAR(DIFFERENTIATION_DATE)로 연도를 추출하고, GROUP BY로 묶어 연도별 MAX(SIZE_OF_COLONY)를 구한다.

SELECT YEAR(DIFFERENTIATION_DATE) AS Y, MAX(SIZE_OF_COLONY) AS MAX_SIZE
FROM ECOLI_DATA
GROUP BY YEAR(DIFFERENTIATION_DATE)

2단계 - 편차 계산

편차 = 연도별 최대 크기 - 자신의 크기이므로 MAX_SIZE - SIZE_OF_COLONY로 표현할 수 있다.

3단계 - 두 단계 합치기

1단계에서 구한 연도별 최대값을 서브쿼리로 만들고, 메인쿼리에서 JOIN으로 연결해 편차를 계산한다. 연결 기준은 연도가 같은 것이므로 YEAR(E.DIFFERENTIATION_DATE) = M.Y로 연결하면 된다.

구체적으로 정리한 풀이 흐름:

  1. 서브쿼리로 연도별 MAX(SIZE_OF_COLONY) 구하기
  2. 메인쿼리에서 서브쿼리와 연도 기준으로 JOIN
  3. MAX_SIZE - SIZE_OF_COLONY AS DEVIATION으로 편차 계산
  4. ORDER BY YEAR ASC, DEVIATION ASC로 정렬

최종 코드

SELECT YEAR(E.DIFFERENTIATION_DATE) AS YEAR,
       MAX_SIZE - E.SIZE_OF_COLONY AS DEVIATION,
       E.ID
FROM ECOLI_DATA E
JOIN (
    SELECT YEAR(DIFFERENTIATION_DATE) AS Y,
           MAX(SIZE_OF_COLONY) AS MAX_SIZE
    FROM ECOLI_DATA
    GROUP BY YEAR(DIFFERENTIATION_DATE)
) M ON YEAR(E.DIFFERENTIATION_DATE) = M.Y
ORDER BY YEAR ASC, DEVIATION ASC

0개의 댓글