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가 된다
'코딩테스트' 카테고리의 다른 글
| [26.02.20 코테(MySQL/Oracle)]-자동차 평균 대여 기간 구하기 (0) | 2026.02.20 |
|---|---|
| [26.02.19 코테(MySQL)]-조건에 맞는 사용자 정보 조회하기 (0) | 2026.02.19 |
| [26.02.12 코테(MySQL)]-대장균의 크기에 따라 분류하기 1 (0) | 2026.02.12 |
| [26.02.11 코테(MySQL/Oracle)]-특정 세대의 대장균 찾기 (0) | 2026.02.11 |
| [26.02.10 코테(MySQL)]-부서별 평균 연봉 조회하기 (0) | 2026.02.10 |