Lv2 - 부모의 형질을 모두 가지는 대장균 찾기

2025. 8. 1. 14:52·CODING TEST/MySQL

📌 문제 정보

- 문제 이름 : 프로그래머스 - (SELECT) 부모의 형질을 모두 가지는 대장균 찾기

- 문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/301647

 

 

📌 문제 요약

- 테이블 :

- 부모의 형질을 모두 보유한 대장균의 ID(ID), 대장균의 형질(GENOTYPE), 부모 대장균의 형질(PARENT_GENOTYPE)을 출력하는 SQL 문을 작성해주세요. 이때 결과는 ID에 대해 오름차순 정렬해주세요.

 

예시)

ID  PARENT_ID  SIZE_OF_COLONY  DIFFERENTIATION_DATE  GENOTYPE
1 NULL 10 2019/01/01 1
2 1 2 2019/01/01 1
3 1 100 2020/01/01 3
4 2 16 2020/01/01 2
5 4 17 2020/01/01 8
6 3 101 2021/01/01 5
7 2 101 2022/01/01 5
8 6 1 2022/01/01 13

 

각 대장균 별 형질을 2진수로 나타내면 다음과 같습니다.

ID 1 : 1₍₂₎
ID 2 : 1₍₂₎
ID 3 : 11₍₂₎
ID 4 : 10₍₂₎
ID 5 : 1000₍₂₎
ID 6 : 101₍₂₎
ID 7 : 101₍₂₎
ID 8 : 1101₍₂₎

각 대장균 별 보유한 형질을 다음과 같습니다.

ID 1 : 1
ID 2 : 1
ID 3 : 1, 2
ID 4 : 2
ID 5 : 4
ID 6 : 1, 3
ID 7 : 1, 3
ID 8 : 1, 3, 4

각 개체별로 살펴보면 다음과 같습니다.

ID 1 : 최초의 대장균 개체이므로 부모가 없습니다.
ID 2 : 부모는 ID 1 이며 부모의 형질인 1번 형질을 보유하고 있습니다.
ID 3 : 부모는 ID 1 이며 부모의 형질인 1번 형질을 보유하고 있습니다.
ID 4 : 부모는 ID 2 이며 부모의 형질인 1번 형질을 보유하고 있지 않습니다.
ID 5 : 부모는 ID 4 이며 부모의 형질인 2번 형질을 보유하고 있지 않습니다.
ID 6 : 부모는 ID 3 이며 부모의 형질 1, 2번 중 2 번 형질을 보유하고 있지 않습니다.
ID 7 : 부모는 ID 2 이며 부모의 형질인 1번 형질을 보유하고 있습니다.
ID 8 : 부모는 ID 6 이며 부모의 형질 1, 3번을 모두 보유하고 있습니다.

따라서 부모의 형질을 모두 보유한 개체는 ID 2, ID 3, ID 7, ID 8

 

출력)

ID  GENOTYPE  PARENT_GENOTYPE
2 1 1
3 3 1
7 5 1
8 13 5

 

 

 

📌 내 풀이 및 코드

SELECT 
  child.ID,                            -- 자식 ID
  child.GENOTYPE,                      -- 자식 형질
  parent.GENOTYPE AS PARENT_GENOTYPE  -- 부모 형질
FROM ECOLI_DATA AS child
JOIN ECOLI_DATA AS parent 
  ON child.PARENT_ID = parent.ID      -- 자식과 부모 테이블을 자기참조 JOIN
WHERE 
  (child.GENOTYPE & parent.GENOTYPE) = parent.GENOTYPE
  -- 부모가 가진 형질이 자식에게 모두 있는 경우만 선택
ORDER BY child.ID ASC;                -- ID 오름차순 정렬

- 테이블이 1개인데 그 자신 테이블도 조인을 할 수 있다는 것을 몰랐음.

- 비트로 표현된 형질이라는 개념이 생소해서 문제가 이해가 안됐고, 2진수에서 1이면 그 형질을 가진것, 0이면 그 형질을 가지지 않은 것을 이해하는데 시간이 좀 걸렸던 것 같음.

 

 

 

📌 새로 배운 문법

<-- 이번 문제에서 새로 배운 Java 문법 정리 -->

** 자기조인 (Self-JOIN) **

- 한 테이블 안에 있는 행들끼리 관계가 있을 때, 같은 테이블을 2개처럼 JOIN해서 비교하거나 연결하는 방법.

- 같은 테이블을 두 번 불러서 비교하고 별칭이 필수임.

SELECT ... FROM 테이블명 AS A
JOIN 테이블명 AS B ON A.컬럼 = B.컬럼

- 자기조인이 필요한 이유? 부모 정보가 같은 테이블에 들어 있을 때 꼭 필요.

상하관계 직원과 상사 (employee.MANAGER_ID = employee.ID)
부모-자식 관계 대장균, 트리 구조, 댓글
시간 비교 이전/이후 레코드 간 차이 비교

'CODING TEST > MySQL' 카테고리의 다른 글

Lv2 - 연도별 대장균 크기의 편차 구하기  (0) 2025.08.01
Lv2 - 분기별 분화된 대장균의 개체 수 구하기  (0) 2025.08.01
Lv2 - 노션별 평균 역 사이 거리 조회하기  (0) 2025.08.01
Lv2 - 조건에 맞는 사원 정보 조회하기  (0) 2025.08.01
Lv2 - 조건에 맞는 개발자 찾기  (0) 2025.07.30
'CODING TEST/MySQL' 카테고리의 다른 글
  • Lv2 - 연도별 대장균 크기의 편차 구하기
  • Lv2 - 분기별 분화된 대장균의 개체 수 구하기
  • Lv2 - 노션별 평균 역 사이 거리 조회하기
  • Lv2 - 조건에 맞는 사원 정보 조회하기
iamyuunzo
iamyuunzo
https://github.com/iamyuunzo
  • iamyuunzo
    iamyuunzo
    iamyuunzo
  • 전체
    오늘
    어제
    • 분류 전체보기 (94)
      • Study (5)
        • App Developer (0)
        • Algorithm study (0)
        • Google AI Essentials (3)
      • Project (3)
        • 감행 (3)
        • Tokkit (0)
        • 다시, 봄 (0)
        • Clone Coding (0)
      • 자격증 모음 (5)
        • AWS Certification (1)
        • 정보처리기사 (0)
        • 빅데이터분석기사 (1)
        • TOEIC Speaking (3)
      • CODING TEST (79)
        • baekjoon (26)
        • programmers (20)
        • MySQL (31)
        • COS Pro (2)
  • 블로그 메뉴

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

    • github
  • 공지사항

  • 인기 글

  • 태그

    AWS Certification
    baekjoon
    회고록
    SQL
    감행
    AWS Certified Cloud Practitioner
    toeic speaking
    백준
    우리 fisa
    토익 스피킹
    우리fisa
    Programmers
    회고
    프로그래머스
    CLF-C02
    프로젝트 리팩토링
    java
    클라우드서비스개발
    COS Pro
    우리fis아카데미
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
iamyuunzo
Lv2 - 부모의 형질을 모두 가지는 대장균 찾기
상단으로

티스토리툴바