Lv1 - 특정 형질을 가지는 대장균 찾기

2025. 7. 17. 14:38·CODING TEST/MySQL

📌 문제 정보

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

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

 

 

 

📌 문제 요약

- ECOLI_DATA 테이블 : ID(대장균 개체의 ID), PARENT_ID(부모 개체의 ID), SIZE_OF_COLONY(개체의 크기), DIFFERENTIATION_DATE(분화되어 나온 날짜), GENOTYPE(개체의 형질)

- 2번 형질이 보유하지 않으면서 1번이나 3번 형질을 보유하고 있는 대장균 개체의 수(COUNT)를 출력하는 SQL 문 작성. 1번과 3번 형질을 모두 보유하고 있는 경우도 1번이나 3번 형질을 보유하고 있는 경우에 포함

 

예시)

ID  PARENT_ID  SIZE_OF_COLONY  DIFFERENTIATION_DATE  GENOTYPE 대장균 별 형질 2진수
1 NULL 10 2019/01/01 8 1000₍₂₎
2 NULL 2 2019/01/01 15 1111₍₂₎
3 2 100 2020/01/01  1 1₍₂₎
4 2 16 2020/01/01  19 1101₍₂₎

- 각 대장균 별 보유한 형질 : ID 1 : 4  /  ID 2 : 1, 2, 3, 4  /  ID 3 : 1  /  ID 4 : 1, 3, 4

- GENOTYPE -> 2진수로 변환한 

 

출력) 2번 형질이 없는 대장균 개체는 ID 1, ID 3, ID 4 이며 이 중 1번이나 3번 형질을 보유한 대장균 개체는 ID 3, ID 4 => 2

COUNT | 2

 

 

 

📌 내 풀이 및 코드

SELECT COUNT(*) AS COUNT
FROM ECOLI_DATA
WHERE 
    GENOTYPE & 2 = 0
    AND (GENOTYPE & 1 != 0 OR GENOTYPE & 4 != 0);

- 비트 마스크 연산이라는걸 처음 알았음.

- 2번 형질 없음: ID 1, 3, 4   /  그 중 1번 또는 3번 형질 있음: ID 3, 4 → ✅ 총 2개

ID  GENOTYPE (10진수)  2진수 형질 목록
1 8 1000₂ 4
2 15 1111₂ 1, 2, 3, 4
3 1 0001₂ 1
4 13 1101₂ 1, 3, 4

- & 2 = 0 뜻 : 2번 형질이 비트상에 없으면 결과는 0   /   & 2 != 0 형질이 있음.

 

 

 

 

📌 새로 배운 문법

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

** 비트마스크(bitmask) **

- 정수형 데이터를 이진수(0, 1)의 묶음으로 표현하고, 이진 연산자(AND, OR, NOT, XOR)를 통해 특정 비트가 켜져 있는지를 검사

- 여러 개의 상태(형질, 옵션, 권한 등)를 한 개의 숫자로 표현할 수 있음. (검사할 때 빠르고 간단한 연산으로 체크 가능)

- 2진수는 항상 오른쪽부터 시작하기 때문에 1번이 오른쪽 끝..

-- GENOTYPE에서 형질 2가 있는지 검사
GENOTYPE & 2 != 0  → 형질 2 있음
GENOTYPE & 2 = 0   → 형질 2 없음

-- 형질 1 또는 3을 가졌는지?
GENOTYPE & 1 != 0 OR GENOTYPE & 4 != 0

 

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

Lv2 - 동명 동물 수 찾기  (0) 2025.07.19
Lv1 - 조건에 부합하는 중고거래 댓글 조회하기  (0) 2025.07.17
Lv1 - 과일로 만든 아이스크림 고르기  (0) 2025.07.17
Lv1 - 자동차 대여 기록에서 장기/단기 대여 구분하기  (0) 2025.07.17
Lv1 - 평균 일일 대여 요금 구하기  (0) 2025.07.16
'CODING TEST/MySQL' 카테고리의 다른 글
  • Lv2 - 동명 동물 수 찾기
  • Lv1 - 조건에 부합하는 중고거래 댓글 조회하기
  • Lv1 - 과일로 만든 아이스크림 고르기
  • Lv1 - 자동차 대여 기록에서 장기/단기 대여 구분하기
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
  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
iamyuunzo
Lv1 - 특정 형질을 가지는 대장균 찾기
상단으로

티스토리툴바