본문 바로가기

Algorithm

[SQL 알고리즘] FrontEnd 개발자 찾기

✅ 문제

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

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

✅ 코드

 

SELECT 
    D.ID,
    D.EMAIL,
    D.FIRST_NAME,
    D.LAST_NAME
FROM 
    DEVELOPERS AS D
WHERE
    EXISTS  (
        SELECT 1 FROM 
        SKILLCODES S
        WHERE (D.SKILL_CODE & S.CODE) != 0
        AND S.CATEGORY = 'Front End'
    )
ORDER BY D.ID    
;

 

 

✏️ 공부한점

일단 바로 뇌정지가 왔다 비트 연산자에대해서 잘 모르고있었고

 

 

 

해당 연산자를 사용해야겠다는 생각조차 안들었다.

 

그래서 찾아보면서 했는데도 잘 이해가 안갈수도있어서 예시를 들어보면서 이해했다.

 

🎯  한 개발자의 skill_code가 2048인 경우

  • 이 개발자의 skill_code는 2048 → 이진수: 1000 0000 0000
  • React의 CODE도 2048 → 이진수: 1000 0000 0000

비트 AND(&) 연산은 둘 다 1인 비트만 1이 됩니다.

 

1000 0000 0000   (2048, 개발자의 skill_code)
&
1000 0000 0000   (2048, React 코드)
--------------
1000 0000 0000   → 결과: 2048 (≠ 0) → React를 보유함!

 

 

반대로: JavaScript(16)와 AND 해보면?

 

1000 0000 0000   (2048, 개발자의 skill_code)
&
0000 0001 0000   (16, JavaScript 코드)
--------------
0000 0000 0000   → 결과: 0 → JavaScript는 없음!

 

 

이런식으로 skill_code랑 비교를해서 비트연산자로 해당 기술을 갖고있는지 알수 있다. 그러면다면

 

우리가 구하고자하는건 FrontEnd기술이기때문에

 

 AND S.CATEGORY = 'Front End' 이조건을 넣어줘서 

 

Frontend기술자만 구해올수있다.

 

핵심은  

 

SELECT 2048 & 2048; -- 결과: 2048
SELECT 2048 & 16;   -- 결과: 0

 

해당 내용을 알고있어야된다 비트연산자로 비교가 가능하다 !