반응형

비트 논리 연산을 알면 풀고 모르면 못 풂
프로그래머스 Lv.4 '언어별 개발자 분류하기' SQL 코드 및 풀이
조건파악
SKILL_CODE가 400 (=b'110010000')이라면, 이는 SKILLCODES 테이블에서 CODE가 256 (=b'100000000'), 128 (=b'10000000'), 16 (=b'10000') 에 해당하는 스킬을 가졌다는 것을 의미합니다.
접근

비트 논리 연산자 &를 이용해 두 수를 비교할 경우 일치하는 비트가 존재할 경우 True가 나온다. 이를 이용해 JOIN하자.
구현
WITH J AS (
SELECT
ID,
EMAIL,
CASE -- 조건에 맞게 SCORE를 기록
WHEN COUNT(CASE WHEN CATEGORY = 'Front End' THEN 1 END) > 0 AND
COUNT(CASE WHEN NAME = 'Python' THEN 1 END) > 0
THEN 3
WHEN COUNT(CASE WHEN NAME = 'C#' THEN 1 END) > 0 THEN 2
WHEN COUNT(CASE WHEN CATEGORY = 'Front End' THEN 1 END) > 0 THEN 1
END AS SCORE
FROM
DEVELOPERS AS D
JOIN -- 비트 논리 연산을 조건으로 JOIN
SKILLCODES AS S ON D.SKILL_CODE & S.CODE
GROUP BY
ID,EMAIL
HAVING
SCORE > 0
)
SELECT
CASE
WHEN SCORE = 3 THEN 'A'
WHEN SCORE = 2 THEN 'B'
WHEN SCORE = 1 THEN 'C'
END AS GRADE,
ID,
EMAIL
FROM
J
ORDER BY
1,2
반응형
'Software Engineering' 카테고리의 다른 글
[SQL 문제 풀이] 프로그래머스 "멸종위기 대장균 찾기" (0) | 2024.09.29 |
---|---|
[SQL 문제 풀이] 프로그래머스 "물고기 종류 별 대어 찾기" (0) | 2024.03.21 |
[Python 문제 풀이] 프로그래머스 "[PCCP 기출문제] 2번 / 석유 시추" (0) | 2024.03.17 |
[Python 문제 풀이] 프로그래머스 "[PCCP 기출문제] 4번 / 수레 움직이기" (0) | 2024.03.17 |
Airflow에서 TaskFlow API(@task)와 PythonOperator가 아닌 Operator 같이 사용하기 (0) | 2024.02.02 |