728x90
문제
https://school.programmers.co.kr/learn/courses/30/lessons/276034
- 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
'코딩테스트 > SQL 코드카타' 카테고리의 다른 글
MySQL 프로그래머스 | 특정 기간동안 대여 가능한 자동차들의 대여비용 구하기 (0) | 2024.09.16 |
---|---|
MySQL 프로그래머스 | 자동차 평균 대여 기간 구하기 (DATEDIFF 함수 주의할 점, +1을 해줘야 하는 이유) (1) | 2024.09.13 |
MySQL 프로그래머스 | 업그레이드 된 아이템 구하기 (부모 노드, 자식 노드) (3) | 2024.09.11 |
MySQL 프로그래머스 | 오프라인/온라인 판매 데이터 통합하기 (SELECT문 컬럼 NULL 처리) (1) | 2024.09.10 |
MySQL 프로그래머스 | 재구매가 일어난 상품과 회원리스트 구하기 (2) | 2024.09.09 |
댓글