๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Coding Test/SQL

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ๋ถ€๋ชจ์˜ ํ˜•์งˆ์„ ๋ชจ๋‘ ๊ฐ€์ง€๋Š” ๋Œ€์žฅ๊ท  ์ฐพ๊ธฐ/MySQL - Lv.2

by The Future Engineer, Lucy 2024. 10. 31.
728x90
๋ฐ˜์‘ํ˜•

โ“๋ฌธ์ œ

https://school.programmers.co.kr/learn/courses/30/lessons/301647

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

SW๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ํ‰๊ฐ€, ๊ต์œก, ์ฑ„์šฉ๊นŒ์ง€ Total Solution์„ ์ œ๊ณตํ•˜๋Š” ๊ฐœ๋ฐœ์ž ์„ฑ์žฅ์„ ์œ„ํ•œ ๋ฒ ์ด์Šค์บ ํ”„

programmers.co.kr

๋ฌธ์ œ ์„ค๋ช…

๋Œ€์žฅ๊ท ๋“ค์€ ์ผ์ • ์ฃผ๊ธฐ๋กœ ๋ถ„ํ™”ํ•˜๋ฉฐ, ๋ถ„ํ™”๋ฅผ ์‹œ์ž‘ํ•œ ๊ฐœ์ฒด๋ฅผ ๋ถ€๋ชจ ๊ฐœ์ฒด, ๋ถ„ํ™”๊ฐ€ ๋˜์–ด ๋‚˜์˜จ ๊ฐœ์ฒด๋ฅผ ์ž์‹ ๊ฐœ์ฒด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
๋‹ค์Œ์€ ์‹คํ—˜์‹ค์—์„œ ๋ฐฐ์–‘ํ•œ ๋Œ€์žฅ๊ท ๋“ค์˜ ์ •๋ณด๋ฅผ ๋‹ด์€ 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 ์—ฐ์‚ฐ)

๐Ÿ“ํ›„๊ธฐ

์ฒ˜์Œ์— ์ž์‹ ํ˜•์งˆ&๋ถ€๋ชจ ํ˜•์งˆ๊นŒ์ง€๋Š” ์ƒ๊ฐํ–ˆ์ง€๋งŒ ๋ถ€๋ชจ ํ˜•์งˆ์„ ๋ชจ๋‘ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค๋Š” ์กฐ๊ฑด์„ ์–ด๋–ป๊ฒŒ ํ‘œํ˜„ํ•ด์•ผ ํ• ์ง€ ์ƒ๊ฐํ•˜์ง€ ๋ชปํ–ˆ๋‹ค. ๊ทธ๋ƒฅ ๊ฒฐ๊ณผ๊ฐ€ ๋ถ€๋ชจ ํ˜•์งˆ๊ฐ€ ๊ฐ™๋‹ค๊ณ  ํ•˜๋ฉด ๋๋Š”๋ฐ...

728x90
๋ฐ˜์‘ํ˜•