코딩테스트/SQL 코드카타

MySQL 프로그래머스 | 조건에 맞는 개발자 (비트 연산자 활용)

ANNASENA 2024. 9. 12. 08:00
728x90

 

문제

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

  • DEVELOPERS 테이블에서 Python이나 C# 스킬을 가진 개발자의 정보를 조회
  • 조건에 맞는 개발자의 ID, 이메일, 이름, 성을 조회하는 SQL 문을 작성
  • ID 기준 오름차순 정렬

 

테이블

SKILLCODES
DEVELOPERS

  • SKILL_CODE가 400 (=b'110010000')인 경우, 
    SKILLCODES 테이블에서 CODE가 256 (=b'100000000'), 128 (=b'10000000'), 16 (=b'10000') 에 해당하는 스킬을 가졌다는 것
  • Python256 (=b'100000000' = 2^8), C#1024 (=b'10000000000' = 2^10)
  • 결국 Python과 C# 스킬이 있으면, 해당 자리에 1이 기록되게 됨
    • Python의 경우, 9번째 자리에 1이 기록
    • C#의 경우, 11번째 자리에 1이 기록

▶ 비트 연산자

& 비트단위 AND 연산
| 비트단위 OR 연산
^ 비트단위 XOR 연산
~ (단항 연산자) 피연산자의 모든 비트 반전 (NOT 연산)
<< 피연산자의 비트 열을 왼쪽으로 이동
>> 피연산자의 비트 열을 오른쪽으로 이동

 

풀이과정

SKILL_CODE의 비트

(Python의 코드 + C# 코드)의 비트

비트연산자 '&'로 비교해서 두 스킬의 자릿수에 모두 1이 있는 경우(!=0) 만 추출

1
2
3
4
5
6
SELECT ID, EMAIL, FIRST_NAME, LAST_NAME FROM DEVELOPERS
WHERE SKILL_CODE & (
(SELECT CODE FROM SKILLCODES WHERE NAME = 'Python'+
(SELECT CODE FROM SKILLCODES WHERE NAME = 'C#')
)!= 0
ORDER BY ID ASC;
cs

728x90