Algorithm (19) ์ธ๋ค์ผํ ๋ฆฌ์คํธํ [ํ๋ก๊ทธ๋๋จธ์ค Lv3] ์ฐ์ ํ์ค ๋ถ๋ถ ์์ด์ ํฉ - Swift https://school.programmers.co.kr/learn/courses/30/lessons/161988 ํ๋ก๊ทธ๋๋จธ์ค ์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์ ๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์ ๋ง์ถคํ ํ๋กํ์ ๋ฑ๋กํ๊ณ , ๋์ ๊ธฐ์ ๊ถํฉ์ด ์ ๋ง๋ ๊ธฐ์ ๋ค์ ๋งค์นญ ๋ฐ์ผ์ธ์. programmers.co.kr ๋ํ์ ์ธ DP์ ํ ๋ฌธ์ ์ธ๋ฐ, Swift ํ์ด๊ฐ ๋ง์ด ์๊ธธ๋ ์ ๋ก๋ ํฉ๋๋ค ! ์ฒ์์ dp ๋ฐฐ์ด์ 2๊ฐ ๋ง๋๋ ์์ด๋์ด๋ฅผ ๋ ์ฌ๋ฆฌ์ง ๋ชปํด์ ์น๊ตฌ์ ๋์์ ๋ฐ์ ํ์๋ค ! ์ค๋ผ์ janechoi.. ๋ค์์ ๋น์ทํ ๋ฌธ์ ๋์ค๋ฉด dp ๋ฐฐ์ด์ 2๊ฐ๋ก ๋๋ ์ ๊ณ์ฐํ๋ ๋ฐฉ๋ฒ์ ํ์ฉํด์ผ๊ฒ ๋ค :) func solution(_ sequence:[Int]) -> Int64 { // -1๋ก ์์ํ๋ ๋ฐฐ์ด var dp1.. Backtracking ๋ฐฑํธ๋ํน ๋ํ ๋ฌธ์ ) NQueen - Swift๋ก ๊ตฌํ NQueen ๋ฌธ์ ๋ฅผ ํธ๋๋ฐ Swift ํ์ด๊ฐ ๋ง์ด ์์ด์ ์ฌ๋ ค๋ด ๋๋ค. Backtracking ์ด๋?๐ฅ ํด๋ฅผ ์ฐพ๋ ๋์ค ํด๊ฐ ์๋์ด์ ๋งํ๋ฉด, ๋๋์๊ฐ์ ๋ค์ ํด๋ฅผ ์ฐพ์๊ฐ๋ ๊ธฐ๋ฒ์ ๋งํฉ๋๋ค. → ์ฆ, DFS๋ฅผ ์ฌ์ฉํ์ฌ ๋ง์ฝ ์กฐ๊ฑด์ ๋ง์ง ์์ผ๋ฉด ๊ทธ ์ฆ์ ์ค๋จํ๊ณ ์ด์ ์ผ๋ก ๋์๊ฐ ๋ค์ ํ์ธํ๋ ๊ฒ์ ๋ฐ๋ณตํ๋ฉด์ ์ํ๋ ์กฐ๊ฑด์ ์ฐพ๋ ์๊ณ ๋ฆฌ์ฆ ์ ๋๋ค. ์ ๋ฆฌํ์๋ฉด, ๋ฐฑํธ๋ํน์ ๋ชจ๋ ๊ฐ๋ฅํ ๊ฒฝ์ฐ์ ์ ์ค์์ ํน์ ํ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๊ฒฝ์ฐ๋ง ์ดํด๋ณด๋ ๊ฒ ๐ฅ ์ฃผ๋ก ๋ฌธ์ ํ์ด์์๋ DFS ๋ฑ์ผ๋ก ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ํ์ํ๋ ๊ณผ์ ์์, ์กฐ๊ฑด๋ฌธ ๋ฑ์ ๊ฑธ์ด ๋ต์ด ์ ๋๋ก ๋ ์ ์๋ ์ํฉ์ ์ ์ํ๊ณ , ๊ทธ๋ฌํ ์ํฉ์ผ ๊ฒฝ์ฐ์๋ ํ์์ ์ค์ง์ํจ ๋ค ๊ทธ ์ด์ ์ผ๋ก ๋์๊ฐ์ ๋ค์ ๋ค๋ฅธ ๊ฒฝ์ฐ๋ฅผ ํ์ํ๊ฒ๋ ๊ตฌํํ ์ ์์ต๋๋ค. N-Queen ๋ฌธ์ .. Algorithm) Dynamic Programming ๋ฌธ์ 1. 1๋ก ๋ง๋ค๊ธฐ ์ ์ X๊ฐ ์ฃผ์ด์ง ๋ ์ ์X์ ์ฌ์ฉํ ์ ์๋ ์ฐ์ฐ์ ๋ค์๊ณผ ๊ฐ์ด 4๊ฐ์ง ์ด๋ค. 1) X๊ฐ 5๋ก ๋๋์ด๋จ์ด์ง๋ฉด, 5๋ก ๋๋๋ค. 2) X๊ฐ 3์ผ๋ก ๋๋์ด๋จ์ด์ง๋ฉด, 3์ผ๋ก ๋๋๋ค. 3) X๊ฐ 2๋ก ๋๋์ด ๋จ์ด์ง๋ฉด, 2๋ก ๋๋๋ค. 4) X์์ 1์ ๋บ๋ค. ์ ์ X๊ฐ ์ฃผ์ด์ก์ ๋, ์ฐ์ฐ 4๊ฐ๋ฅผ ์ ์ ํ ์ฌ์ฉํด์ 1์ ๋ง๋ค๋ ค๊ณ ํ๋ค. ์ฐ์ฐ์ ์ฌ์ฉํ๋ ํ์์ ์ต์๊ฐ์ ์ถ๋ ฅํ์ธ์ ๋ฌธ์ ํ์ด ๋ต์ x = int(input()) # DP ํ ์ด๋ธ ์ด๊ธฐํ d = [0] * 30001 # ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ ์งํ - ๋ณดํ ์ for i in range(2, x+1): # ํ์ฌ์ ์์์ 1์ ๋นผ๋ ๊ฒฝ์ฐ d[i] = d[i-1] + 1 # ํ์ฌ์ ์๊ฐ 2๋ก ๋๋์ด ๋จ์ด์ง๋ ๊ฒฝ์ฐ if i % 2 == 0: d[i] =.. SQL) ํ๋ก๊ทธ๋๋จธ์ค SQL ๊ณ ๋์ Kit - JOIN ANIMAL_INS ANIMAL_OUTS 1. ์์ด์ง ๊ธฐ๋ก ์ฐพ๊ธฐ ์ฒ์ฌ์ง๋ณ์ผ๋ก ์ธํด ์ผ๋ถ ๋ฐ์ดํฐ๊ฐ ์ ์ค๋์์ต๋๋ค. ์ ์์ ๊ฐ ๊ธฐ๋ก์ ์๋๋ฐ, ๋ณดํธ์์ ๋ค์ด์จ ๊ธฐ๋ก์ด ์๋ ๋๋ฌผ์ ID์ ์ด๋ฆ์ ID ์์ผ๋ก ์กฐํํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์. SELECT OUTS.ANIMAL_ID, OUTS.NAME FROM ANIMAL_OUTS OUTS LEFT OUTER JOIN ANIMAL_INS INS ON OUTS.ANIMAL_ID = INS.ANIMAL_ID WHERE INS.ANIMAL_ID is NULL ORDER BY OUTS.ANIMAL_ID LEFT JOIN : ์ผ์ชฝ ํ ์ด๋ธ์ ์ค์ฌ์ผ๋ก ์ค๋ฅธ์ชฝ์ ํ ์ด๋ธ์ ๋งค์น์ํจ๋ค. ์ผ์ชฝ ํ ์ด๋ธ์ ํ๊ฐ์ ๋ ์ฝ๋์ ์ฌ๋ฌ๊ฐ์ ์ค๋ฅธ์ชฝ ํ ์ด๋ธ ๋ ์ฝ๋๊ฐ ์ผ์นํ ๊ฒฝ์ฐ, ํด๋น ์ผ์ชฝ ๋ ์ฝ๋.. SQL) ํ๋ก๊ทธ๋๋จธ์ค SQL ๊ณ ๋์ Kit - IS NULL 1.์ด๋ฆ์ด ์๋ ๋๋ฌผ์ ์์ด๋ ๋๋ฌผ ๋ณดํธ์์ ๋ค์ด์จ ๋๋ฌผ ์ค, ์ด๋ฆ์ด ์๋ ์ฑ๋ก ๋ค์ด์จ ๋๋ฌผ์ ID๋ฅผ ์กฐํํ๋ SQL ๋ฌธ์ ์์ฑํด์ฃผ์ธ์. ๋จ, ID๋ ์ค๋ฆ์ฐจ์ ์ ๋ ฌ๋์ด์ผ ํฉ๋๋ค. SELECT ANIMAL_ID FROM ANIMAL_INS WHERE NAME IS NULL ORDER BY ANIMAL_ID 2. ์ด๋ฆ์ด ์๋ ๋๋ฌผ์ ์์ด๋ ๋๋ฌผ ๋ณดํธ์์ ๋ค์ด์จ ๋๋ฌผ ์ค, ์ด๋ฆ์ด ์๋ ๋๋ฌผ์ ID๋ฅผ ์กฐํํ๋ SQL ๋ฌธ์ ์์ฑํด์ฃผ์ธ์. ๋จ, ID๋ ์ค๋ฆ์ฐจ์ ์ ๋ ฌ๋์ด์ผ ํฉ๋๋ค. SELECT ANIMAL_ID FROM ANIMAL_INS WHERE NAME IS NOT NULL ORDER BY ANIMAL_ID 3. NULL ์ฒ๋ฆฌํ๊ธฐ ์ ์ ๊ฒ์ํ์ ๋๋ฌผ ์ ๋ณด๋ฅผ ๊ฒ์ํ๋ ค ํฉ๋๋ค. ๋๋ฌผ์ ์๋ฌผ ์ข , ์ด๋ฆ, ์ฑ๋ณ ๋ฐ ์ค.. SQL) ํ๋ก๊ทธ๋๋จธ์ค SQL ๊ณ ๋์ kit - GROUP BY 1. ๊ณ ์์ด์ ๊ฐ๋ ๋ช๋ง๋ฆฌ ์์๊น ๋๋ฌผ ๋ณดํธ์์ ๋ค์ด์จ ๋๋ฌผ ์ค ๊ณ ์์ด์ ๊ฐ๊ฐ ๊ฐ๊ฐ ๋ช ๋ง๋ฆฌ์ธ์ง ์กฐํํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์. ์ด๋ ๊ณ ์์ด๋ฅผ ๊ฐ๋ณด๋ค ๋จผ์ ์กฐํํด์ฃผ์ธ์. SELECT ANIMAL_TYPE , COUNT(ANIMAL_TYPE) FROM ANIMAL_INS GROUP BY ANIMAL_TYPE ORDER BY ANIMAL_TYPE 2. ๋๋ช ๋๋ฌผ ์ ์ฐพ๊ธฐ ๋๋ฌผ ๋ณดํธ์์ ๋ค์ด์จ ๋๋ฌผ ์ด๋ฆ ์ค ๋ ๋ฒ ์ด์ ์ฐ์ธ ์ด๋ฆ๊ณผ ํด๋น ์ด๋ฆ์ด ์ฐ์ธ ํ์๋ฅผ ์กฐํํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์. ์ด๋ ๊ฒฐ๊ณผ๋ ์ด๋ฆ์ด ์๋ ๋๋ฌผ์ ์ง๊ณ์์ ์ ์ธํ๋ฉฐ, ๊ฒฐ๊ณผ๋ ์ด๋ฆ ์์ผ๋ก ์กฐํํด์ฃผ์ธ์. - ์ด๋ฆ์ด ์๋ ๋๋ฌผ ์ ์ธ, ์ด๋ฆ๋ณ๋ก ๊ทธ๋ฃน ๋ฌถ์ด์ฃผ๊ณ , HAVING ์ ์์ 2๋ฒ ์ด์ ์ฐ์ธ๊ฑฐ ๊ฑธ๋ฌ์ฃผ๊ธฐ. SELECT NAME, COUNT.. SQL) ํ๋ก๊ทธ๋๋จธ์ค SQL ๊ณ ๋์ Kit - SUM, MIN, MAX 1. ์ต๋๊ฐ ๊ตฌํ๊ธฐ ๊ฐ์ฅ ์ต๊ทผ์ ๋ค์ด์จ ๋๋ฌผ์ ์ธ์ ๋ค์ด์๋์ง ์กฐํํ๋ SQL ๋ฌธ์ ์์ฑํด์ฃผ์ธ์. => ๊ฐ์ฅ ์ต๊ทผ์ ๋ค์ด์์ ๊ฒฝ์ฐ, Datetime์ด ์ ์ผ ํผ SELECT MAX(DATETIME) FROM ANIMAL_INS LIMIT 1; 2. ์ต์๊ฐ ๊ตฌํ๊ธฐ ๋๋ฌผ ๋ณดํธ์์ ๊ฐ์ฅ ๋จผ์ ๋ค์ด์จ ๋๋ฌผ์ ์ธ์ ๋ค์ด์๋์ง ์กฐํํ๋ SQL ๋ฌธ์ ์์ฑํด์ฃผ์ธ์. SELECT MIN(DATETIME) FROM ANIMAL_INS LIMIT 1; 3. ๋๋ฌผ ์ ๊ตฌํ๊ธฐ ๋๋ฌผ ๋ณดํธ์์ ๋๋ฌผ์ด ๋ช ๋ง๋ฆฌ ๋ค์ด์๋์ง ์กฐํํ๋ SQL ๋ฌธ์ ์์ฑํด์ฃผ์ธ์. SELECT COUNT(*) FROM ANIMAL_INS 4. ์ค๋ณต ์ ๊ฑฐํ๊ธฐ ๋๋ฌผ ๋ณดํธ์์ ๋ค์ด์จ ๋๋ฌผ์ ์ด๋ฆ์ ๋ช ๊ฐ์ธ์ง ์กฐํํ๋ SQL ๋ฌธ์ ์์ฑํด์ฃผ์ธ์. ์ด๋ ์ด๋ฆ์ด NULL.. SQL) ํ๋ก๊ทธ๋๋จธ์ค SQL ๊ณ ๋์ Kit - Select ์ต๊ทผ์ ์ฝ๋ฉํ ์คํธ ๋ณด๋ฌ๊ฐ๋๋ SQL ๋ฌธ์ ๋ 1๋ฌธ์ ๋์์ ํ๋ก๊ทธ๋๋จธ์ค ๊ณ ๋์ KIT ๋ฌธ์ ๋ค์ ํ๋ฒ ๋ค ํ๊ณ ๊ฐ๋ค. ์๊ฐ๋ณด๋ค ๊ทธ๋ ๊ฒ ์ด๋ ค์ด ๋ฌธ์ ๋ ์์๋ ๊ฒ ๊ฐ๋ค ! ์ค์ ์ฝํ ์์๋ SELECT, WHERE , LIKE, ORDER BY ์จ์ ํฌํจ๋๋ ๋ฌธ์์ด๋ก ์กฐ๊ฑด ๊ฒ์ฌํ๊ณ ์ ๋ ฌํด์ ์กฐํ. ์ ๋๊ฐ ๋์ด์๋ค ! 1. ๋ชจ๋ ๋ ์ฝ๋ ์กฐํํ๊ธฐ SELECT * FROM ANIMAL_INS ORDER BY ANIMAL_ID 2. ์ญ์ ์ ๋ ฌํ๊ธฐ ๋๋ฌผ ๋ณดํธ์์ ๋ค์ด์จ ๋ชจ๋ ๋๋ฌผ์ ์ด๋ฆ๊ณผ ๋ณดํธ ์์์ผ์ ์กฐํํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์. ๊ฒฐ๊ณผ๋ ANIMAL_ID ์ญ์์ผ๋ก ๋ณด์ฌ์ฃผ์ธ์. SELECT NAME, DATETIME FROM ANIMAL_INS ORDER BY ANIMAL_ID DESC 3. ์ํ ๋๋ฌผ ์ฐพ๊ธฐ ๋๋ฌผ ๋ณดํธ.. ์ด์ 1 2 3 ๋ค์