ํŒŒ์ด์ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜

[๋ฐฑ์ค€ 2798] ๋ธ”๋ž™์žญ (Python)

์€์ง„ 2021. 9. 21. 00:49

๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป๋ฌธ์ œ๋งํฌ

[๋ฐฑ์ค€ 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)