코딩테스트/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') 에 해당하는 스킬을 가졌다는 것 - Python은 256 (=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