๐ ๋ณธ ํฌ์คํ ์์ ์ฌ์ฉ๋๋ ํ ์ด๋ธ์ ์๋ฃ์ ์ถ์ฒ๋ HackerRank ์์ ๋ฐํ๋๋ค. ๋ ๋ค์ํ SQL ๋ฌธ์ ๋ฅผ ํ์ด๋ณด์๋ ค๋ฉด
HackerRank ์ฌ์ดํธ๋ฅผ ๋ฐฉ๋ฌธํด ๋ณด์ธ์!
์ด๋ฒ ํฌ์คํ ์์๋ HackerRank์ Olivander's Inventory ๋ฌธ์ ๋ฅผ ํ์ด๋ณด๋ ค๊ณ ํ๋ค. ํด๋น ๋ฌธ์ ๋ ํ์๊ฐ ์ฝ 1์๊ฐ ๋์ ์ฉ์ฉ ๋งค๋ค๊ฐ ๋ช ๋ฒ์ ์๋ ๋์๋ ํ๋ฆฌ์ง ์์์ ๋ฌธ์ ์ Discussion์ ๋ณด๊ณ ์ดํดํ ๋ฌธ์ ๋ค. ๊ฐ์ธ์ ์ผ๋ก ๋ฌธ์ ๊ฐ ํด๋ฆฌํฌํฐ์ ์ฐ๊ด๋ ์ด์ผ๊ธฐ๋ก ๋์ค๊ธธ๋ ์คํ๋ ค ๋ฌธ์ ๊ฐ ๋ ์ ์ฝํ์ง๋ ์์๊ณ ํท๊ฐ๋ ธ๋ค.(Discussion์ ๋ณด๋ ๋ช ์ฌ๋๋ค์ด ๋ฌธ์ ์ค๋ช ์ด ๋ช ์์ ์ด์ง ์๋ค๊ณ ๋ถ๋ง์ ์ ๊ธฐํ ์๊ฒฌ๋ค๋ ๊ฝค ๋์๋ค..)
์ด ๋ฌธ์ ๋ฅผ ํตํด์ ๋ฐฐ์ฐ๊ฒ ๋ ์ ์ ์๋ธ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ ๋ ๋ฉ์ธ ์ฟผ๋ฆฌ์์ ํ์ฉํ ํ ์ด๋ธ์ ์นผ๋ผ์ ์ฐธ๊ณ ํ ์ ์๋ค๋ ์ ์ด์๋ค. ์ด์ ๋ํ ์์ธํ ์ฌํญ์ ๋ฌธ์ ๋ฅผ ํ์ด๋ณด๋ฉด์ ์ดํดํด๋ณด์. ๋ฌธ์ ์๋ณธ์ ์ฌ๊ธฐ๋ฅผ ํด๋ฆญํด์ ํ์ธํ์. ๋ฌธ์ ์ ์๊ตฌ์ฌํญ์ ๋ค์๊ณผ ๊ฐ๋ค.
Harry Potter and his friends are at Ollivander's with Ron, finally replacing Charlie's old broken wand.
Hermione decides the best way to choose is by determining the minimum number of gold galleons needed to buy eachnon-evilwand of high power and age. Write a query to print theid,age,coins_needed, andpowerof the wands that Ron's interested in, sorted in order of descendingpower. If more than one wand has same power, sort the result in order of descendingage.
(ํด๋ฆฌํฌํฐ์ ์น๊ตฌ๋ค์ ์ฐฐ๋ฆฌ์ ์ค๋๋๊ณ ๋ถ์ ์ง ์งํก์ด๋ฅผ ๊ต์ฒดํ๊ธฐ ์ํด ๋ก ๊ณผ ์ฌ๋ฆฌ๋ฒค๋ ์งํก์ด ๊ฐ๊ฒ๋ฅผ ๋ฐฉ๋ฌธํ๋ค.
ํค๋ฅด๋ฏธ์จ๋๋ ์งํก์ด๋ฅผ ๊ณ ๋ฅด๋ ์ต์ ์ ๋ฐฉ๋ฒ์ผ๋ก์ non-evil ์งํก์ด์ด๋ฉด์ ๋์ Power์ Age ํน์ฑ์ ๊ฐ๋ ์งํก์ด๋ฅผ ์ฌ๊ธฐ ์ํด ํ์ํ ์ต์ํ์ ๋(gold galleons)์ ๊ณ ๋ฅด๋ ๋ฐฉ๋ฒ์ ์ ์ํ๋ค. ์ด ๋ฐฉ๋ฒ์ ์ ์ฉํ์ ๋, ๋ก ์ด ๊ด์ฌ์์ด ํ ๋งํ ์งํก์ด์ id, age, coins_needed, power ๊ฐ๋ค์ ์ถ๋ ฅํด๋ผ. ์ด ๋ 1์ฐจ์ ์ผ๋ก ์ ๋ ฌ ๊ธฐ์ค์ power ๊ธฐ์ค์ผ๋ก ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌํ๋ฉฐ, ๋์ผํ power ๊ฐ์ด ์์ ๋๋ age ๊ฐ์ ๊ธฐ์ค์ผ๋ก ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌํด๋ผ.)
๋ฌธ์ ๊ฐ ๊ฝค ๊ธธ๊ณ ๋ณต์กํ๋ค. ์ฐ๋ฆฌ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ค์๊ณผ ๊ฐ์ ์ฌํญ์ ๋ง์กฑ์์ผ์ผ ํ๋ค.
is_evil=0
๊ฐ์ธ non-evil ์งํก์ด๋ค๋ง ๊ณจ๋ผ์ผ ํ๋ค.- Age, Power ๊ฐ์ด ๊ฐ๊ฐ ๊ฐ์ ์งํก์ด๋ค ์ค์์
coins_needed
๊ฐ์ ์ต์๋ก ํ๋ ์งํก์ด๋ฅผ ๊ณจ๋ผ์ผ ํ๋ค. - 2๊ฐ์ ์ ๋ ฌ ๊ธฐ์ค์ ๋ง์กฑ์์ผ์ผ ํ๋ค.
์ด ๋, ๋ฌธ์ ์๋ณธ์์ ํ ๊ฐ์ง ์ถ๊ฐ์ ์ธ ์ฌํญ์ ๋ถ์ฌํ๋๋ฐ, code
์ age
๊ฐ์ ๊ด๊ณ์๋ค. 1:1 ๋งคํ์ด ๋์ด ์๋ค๊ณ ํ๋๋ฐ ์ฒ์์ ์ด๊ฒ ๋ฌด์จ ๋ง์ธ์ง ์ดํด๊ฐ ์ ์๊ฐ๋ค. ์๊ฐ์ด ์ข ์ง๋๊ณ ์ดํด๊ฐ ๋์๋๋ฐ 1:1 ๋งคํ๋์๋ค๋ผ๋ ์๋ฏธ๋ code-age
๋งคํ๋์ด ์๋ ๊ฐ๋ค์ ์ข
๋ฅ๊ฐ unique ํ๋ค๋ ๊ฒ์ด๋ค. ์ฆ ๋ค์๊ณผ ๊ฐ์ด ์ค๋ณต๋ ์ข
๋ฅ์ code-age
๊ฐ๋ค์ ์กด์ฌํ์ง ์๋๋ค๋ ๊ฒ์ด๋ค.
code | age | power |
3 | 50 | 7 |
3 | 50 | 9 |
์ ํ
์ด๋ธ ๊ฐ์ ํํ์ ๋ฐ์ดํฐ๋ ์กด์ฌํ์ง ์๋๋ค๋ ๊ฒ์ด๋ค. ๋ค์ ๋งํด, code
๊ฐ์ด 3
์ด๋ฉด์ ag
e๊ฐ์ด 50
์ธ ๋ฐ์ดํฐ ํ์ 2๊ฐ๊ฐ ์กด์ฌํ๋ ๊ฒ์ด ์๋ 1๊ฐ๋ง ์กด์ฌํ๋ค๋ ๊ฒ์ด๋ค.
๊ทธ๋ผ ์ด์ ์ ๋ต SQL ๊ตฌ๋ฌธ์ ์ดํด๋ณด์.
SELECT W.id, P.age, W.coins_needed, W.power
FROM Wands W
INNER JOIN Wands_Property P ON W.code = P.code
WHERE P.is_evil = 0
AND W.coins_needed = (SELECT MIN(W1.coins_needed)
FROM Wands W1
INNER JOIN Wands_Property P1 ON W1.code = P1.code
WHERE P1.is_evil = 0
AND W1.power = W.power
AND P1.age = P.age)
ORDER BY W.power DESC, P.age DESC
๋น๊ต์ ์ ๋ต SQL ๊ตฌ๋ฌธ์ ๋ฌธ์ ์ค๋ช
์ ๋นํด ๋จ์ํ๊ธฐ๋ ํ ๊ฒ ๊ฐ๋ค. ์๋ธ์ฟผ๋ฆฌ๋ฅผ 1๊ฐ ๋ฐ์ ์ฌ์ฉํ์ง ์์๋ค. ํ์ง๋ง ๋์ฌ๊ฒจ๋ณด์ผ ํ ์ ํ ๊ฐ์ง๋ ์๋ธ์ฟผ๋ฆฌ์ WHERE
๊ตฌ๋ฌธ์์ ๋ฉ์ธ์ฟผ๋ฆฌ์์ ์กฐ์ธํ ํ
์ด๋ธ๋ค์ ์นผ๋ผ์ ํ์ฉํ๋ค๋ ์ ์ด๋ค. ์ด๋ฅผ ์ด์ฉํด ๊ฐ์ Age
, Power
๊ฐ๋ค์ธ ์งํก์ด ๋ค ์ค์์ coins_needed
๊ฐ์ ์ต์๋กํ๋ ๋ฐ์ดํฐ๋ค์ ์ฐพ์ ์ ์์๋ค๋ ์ ์ด๋ค.