https://school.programmers.co.kr/learn/courses/30/lessons/276034
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
🔍문제 설명
[조건에 맞는 개발자 찾기]
SKILLCODES 테이블은 개발자들이 사용하는 프로그래밍 언어에 대한 정보를 담은 테이블입니다.
SKILLCODES 테이블의 구조는 다음과 같으며, NAME, CATEGORY, CODE는 각각 스킬의 이름, 스킬의 범주, 스킬의 코드를 의미합니다.스킬의 코드는 2진수로 표현했을 때 각 bit로 구분될 수 있도록 2의 제곱수로 구성되어 있습니다.
DEVELOPERS 테이블은 개발자들의 프로그래밍 스킬 정보를 담은 테이블입니다.
DEVELOPERS 테이블의 구조는 다음과 같으며, ID, FIRST_NAME, LAST_NAME, EMAIL, SKILL_CODE는 각각 개발자의 ID, 이름, 성, 이메일, 스킬 코드를 의미합니다.
SKILL_CODE 컬럼은 INTEGER 타입이고, 2진수로 표현했을 때 각 bit는 SKILLCODES 테이블의 코드를 의미합니다.
예를 들어 어떤 개발자의
SKILL_CODE가 400 (=b'110010000')이라면,
이는 SKILLCODES 테이블에서 CODE가 256 (=b'100000000'), 128 (=b'10000000'), 16 (=b'10000') 에 해당하는 스킬을 가졌다는 것을 의미합니다.
문제
DEVELOPERS 테이블에서 Python이나 C# 스킬을 가진 개발자의 정보를 조회하려 합니다. 조건에 맞는 개발자의 ID, 이메일, 이름, 성을 조회하는 SQL 문을 작성해 주세요.
결과는 ID를 기준으로 오름차순 정렬해 주세요.
🔑문제 풀이
SELECT
ID, MAIL, IRST_NAME, AST_NAME
FROM
DEVELOPERS
WHERE
(SKILL_CODE & (SELECT SKILLCODES.CODE
FROM SKILLCODES
WHERE NAME = 'Python') != 0)
OR
(SKILL_CODE & (SELECT SKILLCODES.CODE
FROM SKILLCODES
WHERE NAME = 'C#') != 0)
ORDER BY
ID;
| 처음에는 예시 처럼 DEVELOPERS 테이블의 SKILLCODES 값을 SKILLCODES의 CODE값으로 모두 구하려고 했다.
이러한 과정에서 뇌정지가 와서, 20분동안 멍을 때렸다.
| 서브 쿼리를 두번 써서 비효율적인것 같다. 다른 방식이 있는지 찾아보았는데, 비트연산자를 이용한 JOIN이 있었다.
테스트해보니 내가 작성한 코드보다 속도도 빠르고 정확한것 같다. 좀더..정진...
'코딩테스트' 카테고리의 다른 글
| SQL 코딩테스트 연습_프로그래머스_Level2 / 재구매가 일어난 상품과 회원 리스트 구하기 (0) | 2025.02.21 |
|---|---|
| SQL 코딩테스트 연습_프로그래머스_Level3 / 대장균들의 자식의 수 구하기 (0) | 2025.02.20 |
| SQL 코딩테스트 연습_프로그래머스_Level3 / 대장균의 크기에 따라 분류하기 1 (0) | 2025.02.17 |
| 코딩테스트 연습_프로그래머스 [2024 KAKAO WINTER INTERNSHIP] 가장 많이 받은 선물 (0) | 2024.10.21 |
| 코딩테스트 연습_프로그래머스 [PCCP 기출문제] 1번 / 동영상 재생기 (1) | 2024.10.08 |