[프로그래머스] 언어별 개발자 분류하기

2024. 9. 21. 11:08·알고리즘/SQL

 

Question

 

DEVELOPERS 테이블에서 GRADE별 개발자의 정보를 조회하려 합니다. GRADE는 다음과 같이 정해집니다.
A : Front End 스킬과 Python 스킬을 함께 가지고 있는 개발자
B : C# 스킬을 가진 개발자
C : 그 외의 Front End 개발자
GRADE가 존재하는 개발자의 GRADE, ID, EMAIL을 조회하는 SQL 문을 작성해 주세요.
결과는 GRADE와 ID를 기준으로 오름차순 정렬해 주세요.

 

Pseudocode

 

  1. 서브쿼리로 등급을 매기는 GRADE CTE(공통 테이블 표현식)를 정의:
    • 각 개발자(ID)의 SKILL_CODE를 비트 연산을 통해 여러 조건을 체크합니다.
    • 먼저, Python 기술을 가지고 있고, 동시에 Front End 기술을 가진 경우를 확인하여 이 개발자에게 'A' 등급을 부여합니다.
    • C# 기술을 가진 경우에는 'B' 등급을 부여합니다.
    • Front End 기술만 가진 경우는 'C' 등급을 부여합니다.
    • 그 외에는 'D' 등급을 부여합니다.
  2. 메인 쿼리:
    • GRADE라는 CTE와 DEVELOPERS 테이블을 조인하여 GRADE에 따라 개발자의 등급과 이메일을 선택합니다.
    • GRADE가 'D'가 아닌 경우만 결과로 출력하며, 등급과 ID를 기준으로 정렬합니다.

주요 조건 및 비트 연산:

  • SKILL_CODE & (SELECT CODE FROM SKILLCODES WHERE NAME = 'Python') != 0: 해당 개발자가 Python 기술을 보유했는지 확인.
  • SKILL_CODE & CODE != 0 AND CATEGORY = 'Front End': 해당 개발자가 Front End 기술을 보유했는지 확인.
  • SKILL_CODE & (SELECT CODE FROM SKILLCODES WHERE NAME = 'C#') >= 1: 해당 개발자가 C# 기술을 보유했는지 확인.

 

Code

 

WITH GRADE AS (
    SELECT ID, 
    CASE 
        WHEN SKILL_CODE & (
            SELECT CODE 
            FROM SKILLCODES 
            where name = 'Python') != 0 
            AND 
                (SELECT COUNT(*)   
                 FROM SKILLCODES 
                 WHERE SKILL_CODE & CODE != 0 
                    and 
                        CATEGORY = 'Front End') >= 1 THEN 'A' 
        WHEN SKILL_CODE & (
                SELECT CODE 
                FROM SKILLCODES
                WHERE NAME = 'C#') >= 1 THEN 'B'
        WHEN (SELECT COUNT(*)
              FROM SKILLCODES
              WHERE SKILL_CODE & CODE != 0 
                        AND 
                    CATEGORY = 'Front End') >= 1 THEN 'C' 
        ELSE  'D'
    END GRADE 
    FROM DEVELOPERS 
)
SELECT G.GRADE, G.ID, D.EMAIL
FROM GRADE G JOIN DEVELOPERS D
ON G.ID = D.ID 
WHERE G.GRADE != 'D'
ORDER BY 1, 2

'알고리즘 > SQL' 카테고리의 다른 글

[프로그래머스] 멸종위기의 대장균 찾기도움말  (0) 2024.09.21
[프로그래머스] 특정 형질을 가지는 대장균 찾기  (0) 2024.09.20
[프로그래머스] 부모의 형질을 모두 가지는 대장균 찾기  (0) 2024.09.20
[프로그래머스] 상품을 구매한 회원 비율 구하기  (0) 2024.09.20
[프로그래머스] FrontEnd 개발자 찾기  (0) 2024.09.20
'알고리즘/SQL' 카테고리의 다른 글
  • [프로그래머스] 멸종위기의 대장균 찾기도움말
  • [프로그래머스] 특정 형질을 가지는 대장균 찾기
  • [프로그래머스] 부모의 형질을 모두 가지는 대장균 찾기
  • [프로그래머스] 상품을 구매한 회원 비율 구하기
Noaahhh
Noaahhh
  • Noaahhh
    노아
    Noaahhh
  • 전체
    오늘
    어제
    • 분류 전체보기 (118)
      • 프로젝트 (4)
      • 알고리즘 (113)
        • SQL (108)
        • CP (5)
      • 자격증 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    OAuth2.0
    코딩테스트
    abc421
    querydsl
    SQL
    프로그래머스
    경쟁적프로그래밍
    소셜로그인
    spingboot
    어린 동물 찾기
    PS
    Spring
    JWT
    cp
    atcoder
    pasql
    카카오로그인
    contest395
    atcoder beginner contest
    springboot
    JPQL
    인증/인가
    contest397
    SQL문제
    cp초보
    PCSQL
    ABC
    프로그래밍대회
    집계함수
    아픈 동물 찾기
  • hELLO· Designed By정상우.v4.10.5
Noaahhh
[프로그래머스] 언어별 개발자 분류하기
상단으로

티스토리툴바