최대 1 분 소요

문제 링크

정답

SELECT 
    DISTINCT t1.num ConsecutiveNums
FROM Logs t1
INNER JOIN Logs t2
ON t1.id + 1 = t2.id
INNER JOIN Logs t3
ON t1.id + 2 = t3.id
WHERE t1.num = t2.num AND t2.num = t3.num;

✅ Point

  • 3개의 Logs tableJOIN 하여 인접한 id행끼리 연결
  • num 값이 3개 모두 같은 조합만 선택
  • DISTINCT로 중복되는 num 제거 후 출력

다른 풀이

  • ROW_NUMBER (Window functions)을 활용하여 인접한 행 따지기
    • group_num
      • num을 기준으로 그룹화 & id를 기준으로 오름차순 정렬하여 행 번호 매기기
      • id 의 증가 변화량과 ROW_NUMBER 의 증가 변화량이 같다면 연속적인 행
        SELECT
          DISTINCT num ConsecutiveNums
        FROM (
          SELECT
          id, num,
          t1.id - ROW_NUMBER() OVER (PARTITION BY num ORDER BY id) group_num
          FROM Logs T1
        ) Logs 
        GROUP BY group_num, num
        HAVING COUNT(num) >= 3;