본문 바로가기
Tests/Leetcode

[leetcode] MySQL > 180. Consecutive Numbers

by 코딩하는 금융인 2020. 9. 14.

문제. leetcode database 180. Consecutive Numbers


SQL Schema & Explanation

Write a SQL query to find all numbers that appear at least three times consecutively.

+----+-----+
| Id | Num |
+----+-----+
| 1  |  1  |
| 2  |  1  |
| 3  |  1  |
| 4  |  2  |
| 5  |  1  |
| 6  |  2  |
| 7  |  2  |
+----+-----+

For example, given the above Logs table,
1 is the only number that appears consecutively for at least three times.

+-----------------+
| ConsecutiveNums |
+-----------------+
| 1               |
+-----------------+

출처 : leetcode 180. Consecutive Numbers

 

Consecutive Numbers - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

 


나의 풀이

# Write your MySQL query statement below
select distinct l1.Num ConsecutiveNums
from Logs l1
where 3 = (select count(*)
from Logs l2
where l2.Id between l1.Id and l1.Id+2
and l2.Num = l1.Num)

최소 3번 이상 연속적으로 등장한 숫자를 모두 찾으라고 요구하는 문제입니다.

단순히 3번 이상 등장한 것이 아닌 연속적으로 등장한 숫자를 찾는 것이므로 where문에 서브쿼리를 이용하였습니다.

먼저, 3번 이상 연속적으로 등장한 숫자 중 똑같은 숫자가 있을 수 있으므로 distinct 처리해줬습니다.

where l2.Id between l1.Id and l2.Id+2 and l2.Num = l1.Num는 l1.id부터 l1.id+2 구간 중에서 숫자가 연속적으로 똑같이 나올 조건을 충족시켜주는 구문입니다.

 

Example은 상당히 간단해서 쉬운 문제일 줄 알았는데 생각보다 풀기가 쉽지 않은 문제였습니다.

반응형

댓글