코딩테스트

[26.02.13 코테(MySQL)]-조건에 맞는 개발자 찾기

지니248 2026. 2. 13. 12:37

Lv2. 조건에 맞는 개발자 찾기 (MySQL)

링크: https://school.programmers.co.kr/learn/courses/30/lessons/276034

 

내가 작성한 코드

-- 풀이1 (JOIN)
SELECT DISTINCT D.ID, D.EMAIL, D.FIRST_NAME, D.LAST_NAME -- 한 사람이 Python과 C#을 둘 다 가졌을 때를 고려하여 DISTINCT로 중복 제거
FROM DEVELOPERS D
JOIN SKILLCODES S
  ON (D.SKILL_CODE & S.CODE) > 0 
WHERE S.NAME IN ('Python', 'C#')
ORDER BY D.ID;

-- 풀이2 (EXISTS)
SELECT ID, EMAIL, FIRST_NAME, LAST_NAME
FROM DEVELOPERS D
WHERE EXISTS (SELECT 1
              FROM SKILLCODES S
              WHERE S.NAME IN ('Python', 'C#')
              AND (D.SKILL_CODE & S.CODE) > 0)
OREDR BY ID;

 

& 연산자를 사용한 이유

  • CODE와 SKILL_CODE의 숫자를 이진수로 변환하여 각 자릿수를 비트로 인식한다
  • & 연산자를 통해 두 숫자의 같은 자릿수를 하나씩 대조한다
  • 대조했을 때 Python이나 C#에 해당하는 비트 위치가 둘 다 1이면 결과값은 0보다 큰 값이 나온다
  • 결과가 0보다 크면 해당 스킬을 보유한 것으로 간주하여 True가 된다