💻 프로그래밍/프로그래머스

프로그래머스 - 언어별 개발자 분류하기

ssoniya 2025. 4. 10. 16:10

 

* 문제해설

스킬 코드 값이 고정되어 있지 않기 때문에, Python, C#, Front End에 해당하는 코드 값을 SKILLCODES 테이블에서 동적으로 조회해 사용해야 한다. 

WITH 절(CTE)을 사용하여 각 필요한 코드 값을 미리 추출하고, 메인 쿼리에서 해당 값을 비트 연산자 &와 함께 사용하여 조건을 분기하면 된다.

WITH CODE_ AS (
    SELECT
        (SELECT BIT_OR(CODE) FROM SKILLCODES WHERE CATEGORY = 'Front End') AS FRONT_END,
        (SELECT BIT_OR(CODE) FROM SKILLCODES WHERE NAME = 'Python') AS PYTHON,
        (SELECT BIT_OR(CODE) FROM SKILLCODES WHERE NAME = 'C#') AS CSHARP
),
CTE AS (
    SELECT
        CASE
            WHEN SKILL_CODE & c.FRONT_END > 0 AND SKILL_CODE & c.PYTHON > 0 THEN 'A'
            WHEN SKILL_CODE & c.CSHARP > 0 THEN 'B'
            WHEN SKILL_CODE & c.FRONT_END > 0 THEN 'C'
        END AS GRADE,
        ID, EMAIL
    FROM DEVELOPERS, CODE_ c
)
SELECT *
FROM CTE
WHERE GRADE IS NOT NULL
ORDER BY GRADE, ID;