๐ฉ๐ป๐ป๋ฌธ์ ๋งํฌ
[๋ฐฑ์ค 2798] ๋ธ๋์ญ (Python)
โ๏ธIdea Sketch
ํ๋ ์ด์ด๋ ์ ํ๋ ์๊ฐ ์์ N์ฅ์ ์นด๋ ์ค์์ 3์ฅ์ ์นด๋๋ฅผ ๊ณจ๋ผ์ผ ํ๋ค. ๋ธ๋์ญ ๋ณํ ๊ฒ์์ด๊ธฐ ๋๋ฌธ์, ํ๋ ์ด์ด๊ฐ ๊ณ ๋ฅธ ์นด๋์ ํฉ์ M์ ๋์ง ์์ผ๋ฉด์ M๊ณผ ์ต๋ํ ๊ฐ๊น๊ฒ ๋ง๋ค์ด์ผ ํ๋ค.
์ฒ์์ ์ผ์ค for๋ฌธ์ ์ฐ๋ฉด ๊ตฌํ์ ๋๊ฒ ๊ตฐ ํ๋ค๊ฐ, ์ฑ๋ฅ์ด ๋ณ๋ก์ผ ๊ฒ ๊ฐ์๋ฐ.. ์ค๋ง ์ผ์ค for๋ฌธ์ ์ธ๊น? ํ๋ ์๊ฐ์ ๋ฐฑํธ๋ํน(dfs)์ ์จ์ ํ์๋ค.
๋ค๋ฅธ ๋ถ๋ค์ ์ฝ๋๋ฅผ ํ์ธํ ๊ฒฐ๊ณผ, ์ผ์ค for๋ฌธ์ผ๋ก ๊ตฌํํ ์ฝ๋๊ฐ ๋งค์ฐ ๋ง์๋ค. (์ฑ์ ์๊ฐ๋ ๋ด ๊ฒ๋ณด๋ค ์งง์๋ค..)
๋ฐฑํธ๋ํน ์ฐ์ต๋ฌธ์ ์ธ N๊ณผ M (2) ๋ฌธ์ ๋ฅผ ์์ฉํ๋ฉด ์ฝ๋ค.
์ ์ฒด์ ์ธ ํ๋ฆ์ ๋ค์๊ณผ ๊ฐ๋ค.
dfs()
์์ ํ๋ ์ด์ด๋ ๋ชจ๋ ์นด๋๋ฅผ ์์ฐจ์ ์ผ๋ก ํ์ธํ๋ฉฐ ๊ณ ๋ฅผ์ง ๋ง์ง ๊ฒฐ์ ํ๋ค.
ํ๋ ์ด์ด๊ฐ 3์ฅ์ ๊ณ ๋ฅด๋ฉด,isMax()
์์ ๋ฌธ์ ์ ์กฐ๊ฑด์ ๋ง์กฑํ๋์ง ํ์ธํ์ฌ maX๋ฅผ ์ ๋ฐ์ดํธํ๋ค.
โ๏ธ์์ค์ฝ๋
import sys
def isMax(num):
global maX
if num <= m and num > maX:
maX = num
def dfs(v, cnt):
if cnt >= 3: # ํ๋ ์ด์ด๊ฐ 3์ฅ์ ๊ณ ๋ฅธ ๊ฒฝ์ฐ
isMax(sum(lst))
return
if v >= len(cards): # ๋ชจ๋ ์นด๋๋ฅผ ํ์ธํ ๊ฒฝ์ฐ
return
lst.append(cards[v])
dfs(v+1, cnt+1) # v๋ฒ์งธ ์นด๋๋ฅผ ๊ณ ๋ฅธ ๊ฒฝ์ฐ
lst.pop()
dfs(v+1, cnt) # v๋ฒ์งธ ์นด๋๋ฅผ ๊ณ ๋ฅด์ง ์์ ๊ฒฝ์ฐ
if __name__ == "__main__":
n, m = map(int, sys.stdin.readline().rstrip().split())
cards = list(map(int, sys.stdin.readline().rstrip().split()))
lst = [] # ํ๋ ์ด์ด๊ฐ ๊ณ ๋ฅธ ์นด๋
maX = 0 # M์ ๋์ง ์์ผ๋ฉด์ M๊ณผ ์ต๋ํ ๊ฐ๊น์ด ์นด๋์ ํฉ
dfs(0, 0)
print(maX)