https://school.programmers.co.kr/learn/courses/30/lessons/276036
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
1. 문제 설명
- 변수
- SKILLCODES 테이블
- DEVELOPERS 테이블
DEVELOPERS의 SKILL_CODE가 400 (=b'110010000')이면, SKILLCODES의 CODE에 해당하는 256 (=b'100000000'), 128 (=b'10000000'), 16 (=b'10000') 스킬을 가졌다는 것을 의미
- 결과
GRADE를 다음과 같이 만들고, GRADE, ID, EMAIL 조회
A : Front End와 Python 스킬를 가진 개발자
B : C# 스킬을 가진 개발자
C : 그 외 Front End 개발자
- 주의사항
GRADE, ID를 기준으로 오름차순 정렬
2. 문제 풀이
- 첫번째 : 틀 생성
- Front End 스킬들의 code를 병합한 테이블을 생성
즉, Front_skill_code를 생성하는 테이블을 제작
-- Front End 스킬들의 CODE를 더 함
WITH FRONT_TABLE AS (
SELECT SUM(CODE) AS FRONT_SKILL_CODE
FROM SKILLCODES
GROUP BY CATEGORY
HAVING CATEGORY = 'Front End'
)
앞에 생성한 프론트 테이블을 활용해서 GRADE를 생성하고 조회
--
, DEV_TABLE AS (
-- FRONT_TABLE를 활용해 GRADE 생성
SELECT
CASE
WHEN THEN 'A'
WHEN THEN 'B'
WHEN THEN 'C'
ELSE NULL
END AS GRADE, ID, EMAIL
FROM DEVELOPERS D, FRONT_TABLE F
)
SELECT GRADE, ID, EMAIL
FROM DEV_TABLE
WHERE GRADE IS NOT NULL -- NULL값 제거
ORDER BY GRADE, ID -- 오름차순
- 두번째 : CASE문 채우기
-- GRADE를 생성한 DEV_TABLE
, DEV_TABLE AS (
-- FRONT_TABLE를 활용해 GRADE 생성
SELECT
CASE
-- Front End와 Python 개발자
WHEN (D.SKILL_CODE & F.FRONT_SKILL_CODE) AND (D.SKILL_CODE & (SELECT CODE FROM SKILLCODES WHERE NAME = 'Python')) THEN 'A'
-- C# 개발자
WHEN D.SKILL_CODE & (SELECT CODE FROM SKILLCODES WHERE NAME = 'C#') THEN 'B'
-- 그 외 Front End 개발자
WHEN D.SKILL_CODE & F.FRONT_SKILL_CODE THEN 'C'
ELSE NULL
END AS GRADE, ID, EMAIL
FROM DEVELOPERS D, FRONT_TABLE F
)
- 전체 코드
-- Front End 스킬들의 CODE를 더한 FRONT_TABLE
WITH FRONT_TABLE AS (
SELECT SUM(CODE) AS FRONT_SKILL_CODE
FROM SKILLCODES
GROUP BY CATEGORY
HAVING CATEGORY = 'Front End'
)
-- GRADE를 생성한 DEV_TABLE
, DEV_TABLE AS (
-- FRONT_TABLE를 활용해 GRADE 생성
SELECT
CASE
-- Front End와 Python 개발자
WHEN (D.SKILL_CODE & F.FRONT_SKILL_CODE) AND (D.SKILL_CODE & (SELECT CODE FROM SKILLCODES WHERE NAME = 'Python')) THEN 'A'
-- C# 개발자
WHEN D.SKILL_CODE & (SELECT CODE FROM SKILLCODES WHERE NAME = 'C#') THEN 'B'
-- 그 외 Front End 개발자
WHEN D.SKILL_CODE & F.FRONT_SKILL_CODE THEN 'C'
ELSE NULL
END AS GRADE, ID, EMAIL
FROM DEVELOPERS D, FRONT_TABLE F
)
-- 결과
SELECT GRADE, ID, EMAIL
FROM DEV_TABLE
WHERE GRADE IS NOT NULL -- NULL값 제거
ORDER BY GRADE, ID -- 오름차순
'코딩 알고리즘 스터디' 카테고리의 다른 글
프로그래머스 DP / N으로 표현 (Python) (0) | 2025.03.17 |
---|---|
프로그래머스 [2025 프로그래머스 코드챌린지 2차 예선] / 택배상자 꺼내기 - java (1) | 2025.02.24 |
프로그래머스 [PCCP 기출문제] 1번 / 동영상 재생기 (0) | 2025.02.16 |
프로그래머스 [PCCE 기출문제] 10번 / 데이터 분석 (0) | 2025.02.16 |
프로그래머스 Lv.1 대충 만든 자판도움말 - Java (1) | 2025.01.12 |