Recent Posts
Recent Comments
ღ yuni_world ღ
[MySQL] [프로그래머스 level 4] 언어별 개발자 분류하기 본문
📌 문제링크
https://school.programmers.co.kr/learn/courses/30/lessons/276036
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
📌 문제풀이
with
raw1 as (
select
(select sum(code) from skillcodes where category = 'Front End') as FE,
(select sum(code) from skillcodes where name = 'Python') as P,
(select sum(code) from skillcodes where name = 'C#') as C
)
, raw2 as (
select
case -- (1)'비트연산' 아래에서 추가 정리
when (skill_code & FE > 0) and (skill_code & P > 0) then 'A'
when skill_code & C > 0 then 'B'
when skill_code & FE > 0 then 'C'
end as grade,
id, email
from developers, raw1 -- (2)'카테시안 곱' 아래에서 추가 정리
)
select *
from raw2
where grade is not null
order by 1, 2
📖 NOTE(1)
- 비트 연산
- SQL에서 & 연산자는 비트 AND 연산자로 숫자 간의 비트 단위 연산을 수행할 때 사용되며, 각 비트가 모두 1인 경우에만 1을 반환함 (비트 : 컴퓨터가 정보를 저장하고 처리할 때 사용하는 가장 작은 단위 로 0 또는 1 값만 가질 수 있음)
- 비트연산 예시(해석 포함)
- 프론트엔드 기술: HTML(1), CSS(2), JS(4) → 합치면 1+2+4 = 7 → 0111(2)
- 한 개발자의 SKILL_CODE가 5 → 0101(2) 이라 가정하자.
- 이 때, 5와 7 & 연산을 해보면 5 & 7 → 0101 & 0111 = 0101 → 5 가 나오게됨 (각 비트가 모두 1인 경우만 1 반환)
- 이 때 나온 값이 > 0이면 → 비트 중 겹치는 부분이 하나 이상 있다는 뜻 → 즉, 그 기술을 가지고 있다
- = 0이면 → 겹치는 비트가 하나도 없다는 뜻 → 즉, 기술 없음 을 의미함
- 카테시안 곱
- 두 테이블의 모든 행을 모든 가능한 조합으로 결합하는 연산
- 수학적으로는 A 집합의 요소가 n개, B 집합의 요소가 m개면 → A × B의 결과는 n × m개 로 표현 가능
- 예시
- 테이블 A
ID NAME 1 Alice 2 Bob - 테이블 B
SKILL_ID SKILL_NAME 101 HTML 102 Python - 테이블A x 테이블B 결과
ID NAME SKILL_ID SKILL_NAME 1 Alice 101 HTML 1 Alice 102 Python 2 Bob 101 HTML 2 Bob 102 Python
- 테이블 A
- 두 테이블의 모든 행을 모든 가능한 조합으로 결합하는 연산
📖 NOTE(2)
- 문제 설명 내에 아래와 같은 내용을 함께 알려줌
예를 들어 어떤 개발자의 SKILL_CODE가 400 (=b'110010000')이라면, 이는 SKILLCODES 테이블에서 CODE가 256 (=b'100000000'), 128 (=b'10000000'), 16 (=b'10000') 에 해당하는 스킬을 가졌다는 것을 의미합니다.
- 위 내용은 developers 테이블에 있는 skill_code 와 skill_codes 테이블에 존재하는 code의 합을 활용하여 문제를 풀어야 한다는 것을 의미하며, 스킬의 코드는 2진수로 표현했을 때 각 bit로 구분될 수 있도록 2의 제곱수로 구성되어 있습니다. 문장을 통해 비트연산을 활용할 수 있음을 의미함
- 따라서 raw1 에서 각 스킬별 code의 합을 구해놓은 뒤, raw2에서 비트연산을 통해 각 개발자의 스킬코드가 포함되어 있는지 확인하여 분류
'MySQL > 프로그래머스' 카테고리의 다른 글
| [MySQL] [프로그래머스 level 3] 자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기 (2) | 2025.06.14 |
|---|---|
| [MySQL] [프로그래머스 level 4] FrontEnd 개발자 찾기 (0) | 2025.06.12 |
| [MySQL] [프로그래머스 level 3] 부서별 평균 연봉 조회하기 (0) | 2025.06.04 |
| [MySQL] [프로그래머스 level 3] 대장균들의 자식의 수 구하기 (2) | 2025.05.23 |
| [MySQL] [프로그래머스 level 1] 조건에 부합하는 중고거래 댓글 조회하기 (0) | 2023.09.09 |