프로그래머스 SQL 고득점 킷 조건에 맞는 개발자 찾기

hysss·2024년 3월 9일
0

SELECT - 조건에 맞는 개발자 찾기

문제 분석

DEVELOPERS 테이블에서
Python이나 C# 스킬을 가진 개발자의 정보를 조회하려 합니다.
조건에 맞는 개발자의 ID, 이메일, 이름, 성을 조회하는 SQL 문을 작성해 주세요.
결과는 ID를 기준으로 오름차순 정렬해 주세요.

코드

SELECT ID, EMAIL, FIRST_NAME, LAST_NAME
FROM DEVELOPERS AS D
WHERE D.SKILL_CODE & (SELECT CODE FROM SKILLCODES WHERE NAME="Python") > 0
      OR D.SKILL_CODE & (SELECT CODE FROM SKILLCODES WHERE NAME="C#") > 0
ORDER BY ID

문제 풀이

도대체 어떻게 풀어야 하는가 하고 고민했는데, 비트 연산자를 알고 있는지 묻는 문제였다.

AND(&) 연산을 이용하면 Python 또는 C#의 CODE가 포함되어있는지 체크를 할 수 있다.
비트 AND 연산의 결과는 0 또는 양의 정수가 될 수 있는데, 만약 결과가 0보다 크다면 이는 SKILL_CODE에 해당 비트가 설정되어 있음을 의미하는 것이다.

참고

  • AND (&): 두 비트 모두 1일 때 결과가 1이 됨
    ex: 1011 & 1101 = 1001
  • OR (|): 두 비트 중 하나라도 1이면 결과가 1이 됨
    ex: 1010 | 1100 = 1110
  • XOR (^): 두 비트가 서로 다를 때 결과가 1이 됨
    ex: 1010 ^ 1100 = 0110
  • NOT (~): 비트를 반전시킴. 1은 0으로, 0은 1로 바뀜
    ex: ~1010 = 0101 (실제로는 시스템에 따라 부호가 반전될 수 있으며, 32비트나 64비트 시스템에서는 맨 앞의 1이 여러 개가 될 수 있음)
  • Left Shift (<<): 비트를 왼쪽으로 지정된 횟수만큼 이동시키고, 오른쪽에는 0을 채운다.
    ex: 1011 << 2 = 101100
  • Right Shift (>>): 비트를 오른쪽으로 지정된 횟수만큼 이동시키고, 왼쪽에는 최상위 비트(부호 비트)를 채운다.
    ex: 1011 >> 2 = 0010
profile
매일 매일 규칙적으로

0개의 댓글