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

    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

    댓글