โ๋ฌธ์
https://school.programmers.co.kr/learn/courses/30/lessons/301647
๋ฌธ์ ์ค๋ช
๋์ฅ๊ท ๋ค์ ์ผ์ ์ฃผ๊ธฐ๋ก ๋ถํํ๋ฉฐ, ๋ถํ๋ฅผ ์์ํ ๊ฐ์ฒด๋ฅผ ๋ถ๋ชจ ๊ฐ์ฒด, ๋ถํ๊ฐ ๋์ด ๋์จ ๊ฐ์ฒด๋ฅผ ์์ ๊ฐ์ฒด๋ผ๊ณ ํฉ๋๋ค.
๋ค์์ ์คํ์ค์์ ๋ฐฐ์ํ ๋์ฅ๊ท ๋ค์ ์ ๋ณด๋ฅผ ๋ด์ 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 |
โ๐ปํ์ด
๋์ฅ๊ท ์ ํ์ง๊ณผ ๋ถ๋ชจ ๋์ฅ๊ท ์ ํ์ง์ ๊ฐ๊ฐ ์ด์ง์๋ก ๋ํ๋์ ๋, ๋ค์๊ณผ ๊ฐ๋ค.
ID | BINARY BIT | PARENT ID | BINARY BIT | RESULT | PARENT GENOTYPE |
2 | 1 | 1 | 1 | 1 | 1 |
3 | 11 | 1 | 1 | 1 | 1 |
4 | 10 | 2 | 1 | 0 | 1 |
5 | 1000 | 4 | 10 | 0 | 2 |
6 | 101 | 3 | 11 | 1 | 3 |
7 | 101 | 2 | 1 | 1 | 1 |
8 | 1101 | 6 | 101 | 5 | 5 |
์ด ๋, ๋ถ๋ชจ์ ํ์ง์ ๋ชจ๋ ๊ฐ๊ณ ์์ด์ผ ํ๋ฏ๋ก '๋นํธ ์ฐ์ฐ์ ๊ฒฐ๊ณผ๊ฐ ๋ถ๋ชจ ํ์ง์ ๊ฐ๊ณผ ๊ฐ๋ค'๋ผ๋ ์กฐ๊ฑด์ ๋ง์์ผ ํ๋ค.
ID 6์ ๋ณด๋ฉด ๊ฒฐ๊ณผ์ ๋ถ๋ชจ ํ์ง์ด 1 != 3์ผ๋ก ID 6์ ๋ถ๋ชจ์ ๋ชจ๋ ํ์ง์ ๋ค ๊ฐ์ง ์์์ ์ ์ ์๋ค.
๐ป์ฝ๋
select a.id, a.genotype, b.genotype as parent_genotype
from ecoli_data a join ecoli_data b on a.parent_id = b.id
where b.genotype&a.genotype = b.genotype
order by a.id
๐ก์๋ก ๋ฐฐ์ด ๋ด์ฉ
๋นํธ ์ฐ์ฐ์ | ์ค๋ช |
& | ๋์๋๋ bit๊ฐ ๋ชจ๋ 1์ด๋ฉด 1์ ๋ฐํ. (AND ์ฐ์ฐ) |
| | ๋์๋๋ bit ์ค ํ๋๋ผ๋ 1์ด๋ฉด 1์ ๋ฐํ. (OR ์ฐ์ฐ) |
^ | ๋์๋๋ bit๊ฐ ์๋ก ๋ค๋ฅด๋ฉด 1์ ๋ฐํ. (XOR ์ฐ์ฐ) |
~ | bit๋ฅผ ๋ฐ์ ์ํด. 1์ด๋ฉด 0, 0์ด๋ฉด 1๋ก. (NOT ์ฐ์ฐ) |
>> N | N๋งํผ bit๋ฅผ ์ ๋ถ ์ผ์ชฝ์ผ๋ก ์ด๋์ํด. (Left Shift ์ฐ์ฐ) |
<< N | N๋งํผ bit๋ฅผ ์ ๋ถ ์ค๋ฅธ์ชฝ์ผ๋ก ์ด๋์ํด. (Right Shift ์ฐ์ฐ) |
๐ํ๊ธฐ
์ฒ์์ ์์ ํ์ง&๋ถ๋ชจ ํ์ง๊น์ง๋ ์๊ฐํ์ง๋ง ๋ถ๋ชจ ํ์ง์ ๋ชจ๋ ๊ฐ์ง๊ณ ์์ด์ผ ํ๋ค๋ ์กฐ๊ฑด์ ์ด๋ป๊ฒ ํํํด์ผ ํ ์ง ์๊ฐํ์ง ๋ชปํ๋ค. ๊ทธ๋ฅ ๊ฒฐ๊ณผ๊ฐ ๋ถ๋ชจ ํ์ง๊ฐ ๊ฐ๋ค๊ณ ํ๋ฉด ๋๋๋ฐ...