관리 메뉴

블로그

[Programmers] 276035 - FrontEnd 개발자 찾기 SQL MySQL 본문

공부

[Programmers] 276035 - FrontEnd 개발자 찾기 SQL MySQL

beenu 2024. 11. 1. 01:41
반응형

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

 

프로그래머스

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

programmers.co.kr

 

비트연산 문제는 몇 번 풀어봤는데

풀 때마다 까먹는다 ... 이젠 진짜 기억 좀 하고 싶어서 블로그에 적어 놓으려고 한다 ㅜ

 


 

문제 설명

 

 

SKILLCOEDS 테이블은 개발자들이 사용하는 프로그래밍 언어에 대한 정보를 담은 테이블이다.

여기서 CODE는 스킬의 코드를 의미하는데, 2진수로 표현했을 때 각 bit로 구분될 수 있도록 2의 제곱수로 구성되어 있다.

 

 

DEVELOPERS 테이블은 개발자들의 프로그래밍 스킬 정보를 담은 테이블이다.

여기서 SKILL_CODE는 개발자의 스킬 코드이다.

만약 어떤 개발자의 SKILL_CODE가 400 (=b'110010000')이면 

SKILLCODE 테이블에서 코드가 256 (=b'100000000'), 128 (=b'10000000'), 16 (=b'10000')에 해당하는 스킬을 가졌다는 것을 의미한다.

 

[ 문제 ]

DEVELOPERS 테이블에서 Front End 스킬을 가진 개발자의 정보를 조회하려 합니다. 조건에 맞는 개발자의 ID, 이메일, 이름, 성을 조회하는 SQL 문을 작성해 주세요.

결과는 ID를 기준으로 오름차순 정렬해 주세요.

 


 

풀이

 

1) 우선 CATEGORY가 Front End인 스킬의 CODE 추출

2) DEVELOPERS 테이블에서 SKILL_CODE & CODE == CODE인 행들만 추출

SELECT ID, EMAIL, FIRST_NAME, LAST_NAME
FROM DEVELOPERS
WHERE SKILL_CODE & (SELECT SUM(CODE)
	  	    FROM SKILLCODES
		    WHERE CATEGORY = 'Front End')
ORDER BY ID;

 

비트합 결과가 0이면 거짓, 0이 아니면 참으로 나옴 

근데 이 문제는 JOIN 문젠데, JOIN을 안쓰니까 찜찜해서 다른 코드도 찾아봤다.

 

SELECT DISTINCT ID, EMAIL, FIRST_NAME, LAST_NAME
FROM DEVELOPERS D
    JOIN SKILLCODES S
    ON S.CODE = S.CODE & D.SKILL_CODE
WHERE S.CATEGORY LIKE 'Front%'
ORDER BY ID;

 

CODE = CODE & SKILL_CODE를 하면 가지고 있는 스킬이 여러 개인 경우에 한 사람이 중복 추출되므로 

DISTINCT를 사용해 중복을 제거해주어야 한다 !

 

 

>> 참고 블로그

https://dev-green.tistory.com/135

 

[SQL] MySQL에서의 비트연산 / 프로그래머스 Front End 개발자 찾기

https://school.programmers.co.kr/learn/courses/30/lessons/276035 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞

dev-green.tistory.com

 

https://plum-king.tistory.com/128

 

[MySQL] 프로그래머스 FrontEnd 개발자 찾기

https://school.programmers.co.kr/learn/courses/30/lessons/276035 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞

plum-king.tistory.com

728x90
반응형