Dynamic Programming
๋ฌธ์
ํ์ดํธ์จ๋ ๋ค์ฌ๋ค๋ฅํ ์ฌ๋์ ๋๋ค.(๋ชจ๋ ๊ฒ์ด ๊ทธ์ ๊ด์ฌ ๋์์ ๋๋ค). ๊ทธ๋์ ๊ทธ์๊ฒ๋ ์น๊ตฌ๊ฐ ๋ง์ต๋๋ค. ํ์ง๋ง ๋ถํํ๊ฒ๋ ๊ทธ์ ์น๊ตฌ๋ค์ ๋ค์ฌ๋ค๋ฅํ์ง ์์ต๋๋ค. ๊ฐ๊ฐ์ ์น๊ตฌ๋ 2๊ฐ์ง ์ฃผ์ ์๋ง ๊ด์ฌ์ด ์๊ณ ๋ค๋ฅธ ์ฃผ์ ๋ก ์ด์ผ๊ธฐ ํ๋ ๊ฒ์ ์ซ์ดํฉ๋๋ค. ๊ทธ๋์ ํํฐ๋ฅผ ๊ฐ์ตํ ๋๋ง๋ค ๋ชจ๋๊ฐ ์ฆ๊ฒ๊ฒ ํํฐ๋ฅผ ๋ณด๋ด๋ ค๋ฉด ์ด๋ค ์น๊ตฌ๋ฅผ ์ด๋ํ ์ง๊ฐ ํฐ ๋ฌธ์ ์ ๋๋ค. ํ์ดํธ์จ๋ ๊ทธ๋์์ ๊ฒฝํ์ผ๋ก ์ด๋๋ ์น๊ตฌ ๋ชจ๋๊ฐ ๊ณตํต์ ํฅ๋ฏธ ์๋ ํ์ ๊ฐ ์์ ๋ ํํฐ๋ฅผ ์ฆ๊ธด๋ค๋ ๊ฒ์ ์์์ต๋๋ค.
๋ฌธ์์ด ๋ฐฐ์ด first, second๊ฐ ์ฃผ์ด์ง๋๋ค. ํ์ดํธ์จ์ i๋ฒ์งธ ์น๊ตฌ๊ฐ ํฅ๋ฏธ์๋ ํ์ ๋ first[i]์ second[i]์ ๋๋ค. ์ฆ๊ฑฐ์ด ํํฐ๊ฐ ๋๋ ค๋ฉด ํ์ดํธ์จ๊ฐ ์ด๋ํ ์ ์๋ ์น๊ตฌ๋ ์ต๋ ๋ช ๋ช ์ธ์ง ๋ฆฌํดํ์ธ์.
์ ์
class InterestingParty:
def best_invitaion(self, first, second):
์ ๋ ฅ
first : 1~50๊ฐ์ ์์๊ฐ ์๋ ๋ฐฐ์ด. second : 1~50๊ฐ์ ์์๊ฐ ์๋ ๋ฐฐ์ด. first, second ๊ณตํต : ๊ฐ ์์๋ 1~15๊ฐ ๋ฌธ์์ด๋ฉฐ, ๊ฐ ๋ฌธ์๋ ์์ด ์๋ฌธ์์ ๋๋ค. i๋ฒ์งธ ์์ first[i]์ second[i]์ ๋ด์ฉ์ ๋ค๋ฆ ๋๋ค.
์ถ๋ ฅ
์ ์๋ฅผ ๋ด๊ณ ์๋ ๋ณ์
IO Example
# Case# 0
first = ['fishing', 'gradening', 'swimming', 'fishing']
second = ['hunting', 'fishing', 'fishing', 'biting']
result = 4
# Case# 1
first = ['Variety', 'diversity', 'loquacity', 'courtesy']
second = ['talking', 'speaking', 'discussion', 'meeting']
result = 1
# Case# 2
first = ['snakes', 'programming', 'cobra', 'monty']
second = ['python', 'python', 'anaconda', 'python']
result = 3
# Case# 3
first = ['t', 'o', 'p', 'c', 'o', 'd', 'e', 'r', 's', 'i', 'n', 'g', 'l', 'e',
'r', 'o', 'u', 'n', 'd', 'm', 'a', 't', 'c', 'h', 'f', 'o', 'u', 'r', 'n', 'i']
second = ['n', 'e', 'f', 'o', 'u', 'r', 'j', 'a', 'n', 'u', 'a', 'r', 'y', 't',
'w', 'e', 'n', 't', 'y', 't', 'w', 'o', 's', 'a', 't', 'u', 'r', 'd', 'a', 'y']
result = 6
๊ตฌํ
1์ฐจ ์ฝ๋
์ด์ค ๋ฐ๋ณต๋ฌธ์ ์ด์ฉํ์ฌ ๋ชจ๋ ์์์ ๋ํด ์ค๋ณต๋๋ ํญ๋ชฉ๋ค์ ๊ฐฏ์๋ฅผ ๊ตฌํ ๋ค ans์ ๋น๊ตํ์ฌ ๋ ํฐ ๊ฐ์ ๋ด๋๋ก ํ๋ค.
class InterestingParty:
def best_invitation(self, first, second):
ans = 0
for i in range(len(first)):
f = 0
s = 0
for j in range(len(first)):
if first[i] == first[j]:
f += 1
if first[i] == second[j]:
f += 1
if second[i] == first[j]:
s += 1
if second[i] == second[j]:
s += 1
ans = max(f, ans)
ans = max(s, ans)
return ans
2์ฐจ ์ฝ๋
๊ฐ๋
์ฑ์ด ์ข์ง ์์ ์ด์ค ๋ฐ๋ณต๋ฌธ์ ๋์ฒดํ์ฌ dictionary๋ฅผ ์ฌ์ฉํด์ ๊ตฌํํ์๋ค.
dic์ ๋ชจ๋ ๋จ์ด๋ค์ ๋ฑ๋กํ ํ ๋ฐฐ์ด๋ค์ ๊ฒ์ฌํ์ฌ ์ค๋ณต๋๋ ํญ๋ชฉ์ ๊ฐ์ 1 ์ฆ๊ฐ์ํจ๋ค.
๊ทธ ํ ๊ฐ์ฅ ๊ฐ์ด ํฐ ํญ๋ชฉ์ ๋ฆฌํดํ๋ค.
class InterestingParty:
def best_invitation(self, first, second):
dic = {}
for i in range(len(first)):
dic[first[i]] = 0
dic[second[i]] = 0
for i in range(len(first)):
dic[first[i]] += 1
dic[second[i]] += 1
ans = 0
for key in dic:
ans = max(ans, dic[key])
return ans
๋ง๋ฌด๋ฆฌ
- ๋ฌธ์ ๋ฅผ ์ดํดํ๊ณ ์ ์ฒดํ์ ๋ ์ฌ๋ฆฌ๊ธฐ
์ฆ๊ฑฐ์ด ํํฐ๊ฐ ๋๋ ค๋ฉด ํ์ดํธ์จ๊ฐ ์ด๋ํ ์ ์๋ ์น๊ตฌ๋ ์ต๋ ๋ช ๋ช ์ธ์ง ๋ฆฌํดํ์ธ์.
๊ฐ์ฅ ๋ง์ ๊ฒ์ ๋ตํ๋ผ๋ ๋ฌธ์ ๋ ์ ์ฒด ํ์ ์ ๋จธ๋ฆฌ์์ ๋ ์ฌ๋ ค์ผ ํ๋ค.
- ๋ชจ๋ ๋ฌธ์ ๊ฐ ์ํ์ ์ง์์ด ํ์ํ ๊ฒ์ ์๋๋ค. ์๋ฌด๋ฆฌ ์ํ์ด ๋์ค๋ ๋ฌธ์ ๋ผ๋ ์ ์ฒด ํ์์ ์ด์ฉํ๋ฉด ๊ฐ๋จํ๊ฒ ํด๊ฒฐํ ์๋ ์๋ค.