알고리즘 문제 풀이/프로그래머스

[프로그래머스] 부모의 형질을 모두 가지는 대장균 찾기- python[ SELECT ]

2024. 10. 8. 14:09
목차
  1. 성능 요약
  2. 구분
  3. 채점결과
  4. 제출 일자
  5. 문제 설명
  6. 나의 풀이

[level 2] 부모의 형질을 모두 가지는 대장균 찾기 - 301647

문제 링크

성능 요약

메모리: undefined, 시간:

구분

코딩테스트 연습 > SELECT

채점결과

합계: 100.0 / 100.0

제출 일자

2024년 10월 08일 14:05:50

문제 설명

대장균들은 일정 주기로 분화하며, 분화를 시작한 개체를 부모 개체, 분화가 되어 나온 개체를 자식 개체라고 합니다.
다음은 실험실에서 배양한 대장균들의 정보를 담은 ECOLI_DATA 테이블입니다. ECOLI_DATA 테이블의 구조는 다음과 같으며, ID, PARENT_ID, SIZE_OF_COLONY, DIFFERENTIATION_DATE, GENOTYPE 은 각각 대장균 개체의 ID, 부모 개체의 ID, 개체의 크기, 분화되어 나온 날짜, 개체의 형질을 나타냅니다.

Column name Type Nullable
ID INTEGER FALSE
PARENT_ID INTEGER TRUE
SIZE_OF_COLONY INTEGER FALSE
DIFFERENTIATION_DATE DATE FALSE
GENOTYPE INTEGER FALSE

최초의 대장균 개체의 PARENT_ID 는 NULL 값입니다.


문제

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


예시

예를 들어 ECOLI_DATA 테이블이 다음과 같다면

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 에 대해 오름차순 정렬하면 다음과 같아야 합니다.

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

나의 풀이

푸는데 한참 걸렸던 것 같다. LPAD는 왼쪽에 패딩을 내가 지정한 문자 혹은 숫자로 수행해달라는 함수이고,

BIN은 숫자를 2진수로 변환해준다.

REPLCE는 내가 원하는 문자 혹은 숫자를 지정한 값으로 변환해준다.

 

LPAD를 4,8로 시도했을때는 틀렸으나 16으로 늘려 정답이 되었다.

특이한점은 WHERE절의 LPAD(BIN(a.GENOTYPE & b.GENOTYPE),16,0) 구문인데, SQL은 and 연산을 사용하면 비트연산이라 알아서 비트로 연산을 하더라(13 & 8 = 5 이었다.)

SELECT a.ID, a.GENOTYPE, b.GENOTYPE as PARENT_GENOTYPE
FROM ECOLI_DATA a INNER JOIN ECOLI_DATA b
    ON a.PARENT_ID = b.ID and a.PARENT_ID is not null
WHERE LPAD(BIN(a.GENOTYPE & b.GENOTYPE),16,0) LIKE REPLACE(LPAD(BIN(b.GENOTYPE),16,0),0,'_')
ORDER BY a.ID

'알고리즘 문제 풀이 > 프로그래머스' 카테고리의 다른 글

[프로그래머스] 조건에 맞는 개발자 찾기- mysql[ SELECT ]  (0) 2024.10.15
[프로그래머스] 자동차 대여 기록에서 장기/단기 대여 구분하기- SQL[ DATE ]  (3) 2024.10.02
[프로그래머스] 재구매가 일어난 상품과 회원 리스트 구하기- SQL[ SELECT ]  (2) 2024.09.13
[프로그래머스] 가격이 제일 비싼 식품의 정보 출력하기- SQL [ SUM ]  (0) 2024.09.11
[프로그래머스] - [PCCE 기출문제] 10번 / 데이터 분석 - python[ 구현 ]  (0) 2024.05.22
  1. 성능 요약
  2. 구분
  3. 채점결과
  4. 제출 일자
  5. 문제 설명
  6. 나의 풀이
'알고리즘 문제 풀이/프로그래머스' 카테고리의 다른 글
  • [프로그래머스] 조건에 맞는 개발자 찾기- mysql[ SELECT ]
  • [프로그래머스] 자동차 대여 기록에서 장기/단기 대여 구분하기- SQL[ DATE ]
  • [프로그래머스] 재구매가 일어난 상품과 회원 리스트 구하기- SQL[ SELECT ]
  • [프로그래머스] 가격이 제일 비싼 식품의 정보 출력하기- SQL [ SUM ]
잘잔디
잘잔디
4학년이 되고 취업 준비를 위해 2023-01-01부터 공부한 내용을 정리한 블로그입니다.
잘잔디
MBCS 공부일지
잘잔디
전체
오늘
어제
  • 분류 전체보기 (217)
    • 파이썬 (28)
      • 파이썬 이론 (8)
      • NumPy (3)
      • Pandas (6)
      • 파이썬 시각화 (8)
      • 응용 (2)
    • Java (3)
    • Back (38)
      • DataBase이론 (12)
      • MySQL (2)
      • JSP (8)
      • JSTL (2)
      • Spring (0)
      • Django (8)
      • MongoDB (6)
      • FastAPI (0)
    • Front (8)
      • HTML (3)
      • CSS (2)
      • JS (1)
    • 회고록 (10)
    • 알고리즘 문제 풀이 (95)
      • 알고리즘 이론 공부 (14)
      • 프로그래머스 (69)
      • 백준 (12)
    • 머신러닝 (0)
    • 딥러닝 (0)
    • Git (3)
    • R 프로그래밍 (3)
    • 빅데이터 관리 (16)
      • 리눅스 (4)
      • Hadoop (12)
    • AWS (2)
    • 일상 (10)
      • 책 리뷰 (5)
      • TOEIC (2)
      • 자잘하게 공부한 것들 (2)
    • 사이버보안 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 객체지향
  • db
  • git
  • 독산역
  • 이중우선순위 큐
  • Database
  • 골드
  • JavaScript
  • CSS
  • Java
  • web
  • HTML
  • playdata
  • 즐거웠다
  • JS
  • backend
  • Encore
  • OOP
  • 백준

최근 댓글

최근 글

hELLO · Designed By 정상우.
잘잔디
[프로그래머스] 부모의 형질을 모두 가지는 대장균 찾기- python[ SELECT ]
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.