๐Ÿ’พ

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

๋งˆ๋ฌด๋ฆฌ

  • ๋ฌธ์ œ๋ฅผ ์ดํ•ดํ•˜๊ณ  ์ „์ฒดํƒ์ƒ‰ ๋– ์˜ฌ๋ฆฌ๊ธฐ

์ฆ๊ฑฐ์šด ํŒŒํ‹ฐ๊ฐ€ ๋˜๋ ค๋ฉด ํ™”์ดํŠธ์”จ๊ฐ€ ์ดˆ๋Œ€ํ•  ์ˆ˜ ์žˆ๋Š” ์นœ๊ตฌ๋Š” ์ตœ๋Œ€ ๋ช‡ ๋ช… ์ธ์ง€ ๋ฆฌํ„ดํ•˜์„ธ์š”.

๊ฐ€์žฅ ๋งŽ์€ ๊ฒƒ์„ ๋‹ตํ•˜๋ผ๋Š” ๋ฌธ์ œ๋Š” ์ „์ฒด ํƒ์ƒ‰ ์„ ๋จธ๋ฆฌ์†์— ๋– ์˜ฌ๋ ค์•ผ ํ•œ๋‹ค.

  • ๋ชจ๋“  ๋ฌธ์ œ๊ฐ€ ์ˆ˜ํ•™์  ์ง€์‹์ด ํ•„์š”ํ•œ ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค. ์•„๋ฌด๋ฆฌ ์ˆ˜ํ•™์ด ๋‚˜์˜ค๋Š” ๋ฌธ์ œ๋ผ๋„ ์ „์ฒด ํƒ์ƒ‰์„ ์ด์šฉํ•˜๋ฉด ๊ฐ„๋‹จํ•˜๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
yoon.homme
yoon.homme

๊ธฐ์ˆ ๊ณผ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜์˜ ํž˜์ด ์„ธ์ƒ์„ ๋ฐ”๊พผ๋‹ค๊ณ  ๋ฏฟ์Šต๋‹ˆ๋‹ค.

ํŽธ๋ฆฌํ•œ ์„ธ์ƒ์œผ๋กœ ๋‚˜์•„๊ฐ€๊ธฐ ์œ„ํ•ด ๊ณ ๋ฏผํ•˜๊ณ  ๊ฐœ๋ฐœํ•ฉ๋‹ˆ๋‹ค.