[ 알고리즘 ] LeetCode 2298. Tasks Count in the Weekend

이주 weekwith.me·2022년 6월 14일

알고리즘

목록 보기
5/73
post-thumbnail

블로그를 이전 중이라 완료되기 전까지는 벨로그에 작성할 계획입니다.
이후 모든 글은 https://weekwith.me 에 작성 예정이니 다른 글이 궁금하시다면 해당 링크를 통해 방문해주세요.

본 글은 [ LeetCode ] 2298. Tasks Count in the Weekend를 풀고 작성한 글입니다.

문제

테이블

Table: Drivers

+-------------+------+
| Column Name | Type |
+-------------+------+
| task_id     | int  |
| assignee_id | int  |
| submit_date | date |
+-------------+------+
task_id is the primary key for this table.
Each row in this table contains the ID of a task, the id of the assignee, and the submission date.

요구사항

Write an SQL query to report:

  • the number of the tasks that were submitted during the weekend (Saturday, Sunday) as weekend_cnt , and
  • the number of the tasks that were submitted during the working days as working_cnt .

Return the result table in any order.

The query result format is shown in the following example.

풀이

접근법

처음에 GROUP BY 구를 사용하여 GROUP BY IF(DAYNAME(submit_date) IN('Saturday', 'Sunday'), 'weekend', 'working days')) 와 같이 표현해서 주말과 평일을 기준으로 묶어서 문제를 해결하려 했다.

하지만 이럴 경우 아래 예시 출력 결과와 같이 하나의 행이 아닌 주말인 경우와 평일인 경우로 나누어져 두 개의 행을 반환한다. 그래서 GROUP BY 구를 사용하지 말아야 한다.

+-------------+-------------+
| weekend_cnt | working_cnt |
+-------------+-------------+
| 0           | 3           |
| 3           | 0           |
+-------------+-------------+

결론적으로 단순히 COUNT 함수에 IF 조건문을 활용해서 문제를 해결할 수 있다. 이때 submit_date 필드의 값이 NULL 인 경우, 다시 말해 정상적인 제출이 되지 않은 경우에 대해서 고민을 해봤는데 테스트 케이스를 돌려본 결과 이번 문제는 이런 경우를 따로 가정하지 않는 것 같았다. task_date 필드 또한 존재해서 작업을 시도한 날짜와 제출이 정상적으로 된 날짜가 각각 존재하는 경우, 혹은 Tasks , Submits 테이블로 나누는 등 다양한 방식으로 문제를 조금 비틀어 내볼 수도 있을 것 같았다.

나의 풀이

접근법에 따라 간단하게 COUNT 함수를 나누어 사용하는데 이때 내부 조건으로 IN 과 NOT IN 으로 구별했다.

이때 COUNT 함수는 NULL 값을 무시하는데 이는 SUM 함수 또한 마찬가지다. 연산을 아예 수행하지 않고 건너 뛴다고 생각하면 된다.

SELECT
    COUNT(IF(DAYNAME(submit_date) IN ('Saturday', 'Sunday'), submit_date, NULL)) AS weekend_cnt,
    COUNT(IF(DAYNAME(submit_date) NOT IN ('Saturday', 'Sunday'), submit_date, NULL)) AS working_cnt
FROM Tasks;
profile
Be Happy 😆

0개의 댓글