본문 바로가기
🗄️ DB_이야기/# ⚡SQL

🚀[SQL 알고리즘 문제 풀이] Programmers : 조건에 맞는 개발자 찾기(SELECT)

by gwon_s 2026. 4. 15.

👇 조건에 맞는 개발자 찾기

 

프로그래머스

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

programmers.co.kr

 

🔓 문제 설명

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

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

 

예시 문제 데이터

[SKILLCODES]

NAME CATEGORY CODE
C++ Back End 4
JavaScript Front End 16
Java Back End 128
Python Back End 256
C# Back End 1024
React Front End 2048
Vue Front End 8192
Node.js Back End 16384

 

[DEVELOPERS]

ID FIRST_NAME LAST_NAME EMAIL SKILL_CODE
D165 Jerami Edwards jerami_edwards@grepp.co 400
D161 Carsen Garza carsen_garza@grepp.co 2048
D164 Kelly Grant kelly_grant@grepp.co 1024
D163 Luka Cory luka_cory@grepp.co 16384
D162 Cade Cunningham cade_cunningham@grepp.co 8452

 


⚡SQL Query

MySQL & PostgreSQL

SELECT ID, EMAIL, FIRST_NAME, LAST_NAME
FROM DEVELOPERS
WHERE SKILL_CODE & (SELECT CODE FROM SKILLCODES WHERE NAME = 'Python')
   OR SKILL_CODE & (SELECT CODE FROM SKILLCODES WHERE NAME = 'C#')
ORDER BY ID ASC;

 

Oracle

SELECT ID, EMAIL, FIRST_NAME, LAST_NAME
FROM DEVELOPERS
WHERE BITAND(SKILL_CODE, (SELECT CODE FROM SKILLCODES WHERE NAME = 'Python')) > 0
   OR BITAND(SKILL_CODE, (SELECT CODE FROM SKILLCODES WHERE NAME = 'C#')) > 0
ORDER BY ID ASC;
  • Oracle에서 WHERE [숫자] 형태는 문법 오류이며, 반드시 WHERE [숫자] > 0 또는 WHERE [숫자] = 256과 같이 결과가 True/False가 되는 논리식으로 만들어줘야 합니다. 따라서 더미 비교 연산자(> 0)를 통해 논리식을 완성해주었습니다.

 

🔎 풀이 설명

1. 조건 필터링: 'Pyhon'과 'C#' 스킬코드를 추출합니다.

2. 비트 연산: 개발자의 스킬코드와 위에서 추출한 스킬코드와 AND연산을 합니다.

ID NAME SKILL_CODE Python(256) 검사 C#(1024) 검사 결과
D161 Carsen 2048 2048 & 256 = 0 2048 & 1024 = 0 탈락
D162 Cade 8452 8452 & 256 = 256 8452 & 1024 = 0 합격 (Python)
D163 Luka 16384 16384 & 256 = 0 16384 & 1024 = 0 탈락
D164 Kelly 1024 1024 & 256 = 0 1024 & 1024 = 1024 합격 (C#)
D165 Jerami 400 400 & 256 = 256 400 & 1024 = 0 합격 (Python)

 


💡인사이트

1. 서브 쿼리 vs Join

  • WHERE절에 서브쿼리를 쓰면 가독성은 좋지만, 대용량 데이터의 경우 JOIN이 가능하다면 JOIN으로 풀어내는 것이 옵티마이저가 실행 계획을 세우기에 더 유리할 수 있습니다.

 

3. 실행 계획

  • MySQL: & 연산자를 사용하면 기본적으로 인덱스를 타지 못하고 Table Full Scan을 수행합니다.
  • Oracle: BITAND 역시 함수이므로 인덱스 컬럼을 가공한 형태가 되어 Full Scan을 합니다. 하지만 Oracle은 이를 해결하기 위해 함수 기반 인덱스(FBI)를 생성할 수 있는 강력한 기능을 제공합니다.