https://school.programmers.co.kr/learn/courses/30/lessons/276034
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제
DEVELOPERS 테이블에서 Python이나 C# 스킬을 가진 개발자의 정보를 조회하려고 한다. 조건에 맞는 개발자의 ID, 이메일, 이름, 성을 조회하는 SQL 문을 작성하라.
단, 결과는 ID를 기준으로 오름차순 정렬하라.
코드
SELECT ID, EMAIL, FIRST_NAME, LAST_NAME
FROM DEVELOPERS D
WHERE SKILL_CODE & (SELECT CODE FROM SKILLCODES WHERE NAME = 'Python')
OR SKILL_CODE & (SELECT CODE FROM SKILLCODES WHERE NAME = 'C#')
ORDER BY 1;
풀이
우선 개발자가 Python이나 C# 스킬을 가지고 있는지 확인하기 위해서는 'DEVELOPERS 테이블의 SKILL_CODE'와 'SKILLCODES 테이블의 CODE' 를 비트연산자를 활용해서 비교해야 한다.
우선 서브쿼리를 이용해서 SKILLCODES 테이블에서 스킬이 Python, C# 일 때 각 CODE를 구해준다. 그리고 비트연산자인 &를 사용해 기존의 개발자의 SKILL_CODE와 비교해서 해당 개발자가 Python, C# 스킬을 가지고 있는지 판단한다.
비트연산, 비트연산자에 대해 잘 모르면 아래를 확인하자.
우선 예시를 통해 코드를 이해해보자.
어떤 개발자의 SKILL_CODE가 400 이라면 이를 2진수로 변환하면 110010000 이다.
그리고 파이썬의 CODE가 256 이라면 이를 2진수로 변환하면 100000000 이다.
그리고 C#의 CODE가 15 라면 이를 2진수로 변환하면 01111이다.
이 때 해당 개발자가 파이썬이나 C#의 스킬을 가지고 있는지 확인하기 위해서는 '개발자의 스킬코드' 와 '특정 스킬의 스킬코드'를 비트연산자인 &를 통해 연산해야 한다.
(1) 개발자의 스킬코드인 400과 파이썬의 스킬코드인 256을 우선 살펴보자.
400 & 256 -> 110010000 & 100000000 -> 100000000(=256)으로 0이 아닌 수이기 때문에 개발자는 해당 스킬코드를 가지고 있다.
(2) 개발자의 스킬코드인 400과 C#의 스킬코드인 15를 연산해보자.
400 & 15 -> 110010000 & (0000)01111 -> 000000000(=0)으로 0이기 때문에 개발자는 해당 스킬코드를 가지지 않는다. 이 때 2진수 연산 시 두 자릿수가 맞지 않으면 자리수를 맞춰주기 위해 짧은 거 기준 왼쪽으로 0을 채워 길이를 맞춰주면 된다.
'SQL > Coding Test' 카테고리의 다른 글
[프로그래머스] 특정 기간동안 대여 가능한 자동차들의 대여비용 구하기 (0) | 2024.03.28 |
---|---|
[프로그래머스] 즐겨찾기가 가장 많은 식당 정보 출력하기 (0) | 2024.03.21 |
[프로그래머스] 대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기 (0) | 2024.03.20 |
[프로그래머스] 가격대 별 상품 개수 구하기 (0) | 2024.03.19 |
[프로그래머스] 년, 월, 성별 별 상품 구매 회원 수 구하기 (0) | 2024.03.15 |