์ฒ์์ ์๊ฐํ๋ ํ์ด
1. ๋์
๋๋ฆฌ ์์ฑ = "์์์ ์ข
๋ฅ":["์์์ด๋ฆ"]
2. ๋ฒ์ (1...์์์ ์ข
๋ฅ ์) dp ํ
์ด๋ธ ๋ง๋ค๊ธฐ
3. dp ํ ์ด๋ธ ๊ฒฐ๊ณผ ๋ฐํ
์ด ์์๋๋ก ๊ทธ๋ฆผ์ ๊ทธ๋ฆฌ๊ณ ๊ท์น์ ์ฐพ์ dp ํ ์ด๋ธ์ ๋ง๋ค์ด ํด๊ฒฐํ๋ ค ํ์๋ค..
๊ท์น์ ์ฐพ๊ณ ์ถ์๋๋ฐ, ๊ฐ๋ง ์ค๊ณ .. ์๊ฐํ๋ ๋๋ก ํด๊ฒฐ๋์ง ์์์ "ํ๋ก๊ทธ๋๋จธ์ค์ ์ง๋ฌธํ๊ธฐ"๋ฅผ ํ์ธํด๋ดค๋๋ฐ ๋ช ์พํ ์ํ์ ํ์ด๊ฐ ์์ด์ ๊ธฐ๋กํด๋๊ณ ์ ํ๋ค.
๊ณ ๋ฑํ์ ๋ ์ด ๋ฌธ์ ๋ฅผ ๋ดค์ผ๋ฉด ์ข ๋ ๋น ๋ฅด๊ฒ ํด๊ฒฐ๋ฐฉ์์ ์์๋์ ๋ฏ ํ๋ค,,ใ .ใ
ํด๊ฒฐ ๋ฐฉ์
์์์ ์ข ๋ฅ 1๊ฐ์ง ์์์ผ ๊ฒฝ์ฐ ๋ฐํ๊ฐ = ์์ ๊ฐ์ (์๋๋ถํด ํธ์์ "๊ฐ์" ์๋ต)
์์์ ์ข ๋ฅ 2๊ฐ์ง ์์, ํ์์ผ ๊ฒฝ์ฐ ๋ฐํ๊ฐ = ์์ + ํ์ + ์์ * ํ์
์์์ ์ข ๋ฅ 3๊ฐ์ง ์์, ํ์, ์ ๋ฐ์ผ ๊ฒฝ์ฐ ๋ฐํ๊ฐ = ์์ + ํ์ + ์ ๋ฐ + ์์ * ํ์ + ํ์ * ์ ๋ฐ + ์์ * ์ ๋ฐ + ์์ * ํ์ * ์ ๋ฐ
๋ณด๊ธฐ ์ฝ๊ฒ ๋ค์ ์์ฑํด๋ณด๋ฉด ์๋์ ๊ฐ๋ค.
์์์ ์ข ๋ฅ 2๊ฐ์ง x, y์ผ ๊ฒฝ์ฐ ๋ฐํ๊ฐ = x + y + xy
์์์ ์ข ๋ฅ 3๊ฐ์ง x, y, z์ผ ๊ฒฝ์ฐ ๋ฐํ๊ฐ = x + y + z + xy + yz + xz + xyz
์ด๋ฐ ์ ๊ฐ๋ฐฉ์๊ณผ ์ ์ฌํ ์ผ๋ฐํ ๋ฐฉ์ ์์ ํ๋ ์ดํด๋ณด์..!
(x+1)(y+1)(z+1) = xyz + xy + yz + xz ++ x + y + z + 1
์์์ ๋ณธ ์์์ ์ข ๋ฅ ์์ ๋ฐ๋ฅธ ๋ฐํ๊ฐ๊ณผ ์ ์ฌํด๋ณด์ด์ง ์๋์?!!!!!!
์ฐ๋ฆฌ๊ฐ ์ํ๋ ๊ฑด "xyz + xy + yz + xz ++ x + y + z" ์ด๋ค!
xyz + xy + yz + xz + x + y + z = (x+1)(y+1)(z+1) - 1
๋ฐ๋ผ์ ์์ ๋ฐฉ์ ์์ฒ๋ผ ์นํํด๋ณด๋ฉด ์ฐ๋ฆฌ๊ฐ ์ํ๋ ๊ฒฐ๊ณผ๋ ๋ฐฉ์์ (x+1)(y+1)(z+1) - 1 ๋ฅผ ๊ณ์ฐํ๋ฉด ๋๋ค๋ ๊ฒ์ ์ ์ ์๋ค.
์ด๋ฅผ ์ผ๋ฐํํด๋ณธ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
(1๋ฒ์งธ ์ข ๋ฅ์ ์์ ๊ฐ์ + 1) ... (n๋ฒ์งธ ์ข ๋ฅ์ ์์ ๊ฐ์ + 1) - 1
์ด์ ๋ฌธ์ ๋ก ๋์๊ฐ์!
์ด์ ๋ฌธ์ ๋ฅผ ํ์ดํ๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ด ์ธ ๋จ๊ณ๋ก ์ ์ํ ์ ์์ ๊ฒ์ด๋ค.
1. ๋์ ๋๋ฆฌ ์์ฑ = ["์์์ ์ข ๋ฅ":["์์์ด๋ฆ"]]
2. ๋ฐ๋ณต๋ฌธ์ผ๋ก ๋์ ๋๋ฆฌ๋ฅผ ๋๋ฉด์ (value.count + 1)๋ฅผ ans ๋ณ์์ ๊ณฑํด์ฃผ๊ธฐ
3. ans - 1 ๋ฐํ
func solution(_ clothes:[[String]]) -> Int {
var ans = 1
var dic: [String: [String]] = [:]
for cloth in clothes {
if dic[cloth[1]] == nil {
dic[cloth[1]] = [cloth[0]]
} else {
dic[cloth[1]]!.append(cloth[0])
}
}
for d in dic {
ans *= d.value.count + 1
}
return ans - 1
}