코딩테스트/프로그래머스

[SQL][WITH][비트] 언어별 개발자 분류하기

박소민 2025. 5. 15. 15:14
언어별 개발자 분류하기
 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

  • 풀이
    • FRONT는 Front End 코드들을 모두 합쳐놓은 코드이기 때문에 = CODE로 못하고 >0 으로 해야함
      • 하나라도 가지고 있는지 확인하는 것이기 때문에
    • 나머지는 (D.SKILL_CODE & P.CODE) = P.CODE 이런 식으로 해도됨
    • 아무것도 안겹치는 애들을 제외하기 위해 WHERE절이 필수로 필요함
WITH 
FRONT AS (
    SELECT SUM(CODE) AS CODE
    FROM SKILLCODES
    WHERE CATEGORY = 'Front End'
),
PYTHON AS (
    SELECT CODE FROM SKILLCODES WHERE NAME = 'Python'
),
CSHARP AS (
    SELECT CODE FROM SKILLCODES WHERE NAME = 'C#'
)

SELECT
    CASE
        WHEN (D.SKILL_CODE & F.CODE) > 0 AND (D.SKILL_CODE & P.CODE) > 0 THEN 'A'
        WHEN (D.SKILL_CODE & C.CODE) > 0 THEN 'B'
        WHEN (D.SKILL_CODE & F.CODE) > 0 THEN 'C'
    END AS GRADE,
    D.ID,
    D.EMAIL
FROM DEVELOPERS D
JOIN FRONT F ON 1 = 1
JOIN PYTHON P ON 1 = 1
JOIN CSHARP C ON 1 = 1
WHERE (D.SKILL_CODE & F.CODE) > 0 AND (D.SKILL_CODE & P.CODE) > 0 OR
    (D.SKILL_CODE & C.CODE) > 0 OR
    (D.SKILL_CODE & F.CODE) > 0
ORDER BY GRADE, ID;