[Python - ๋ฐฑ์ค€ 14888] ์—ฐ์‚ฐ์ž ๋ผ์›Œ๋„ฃ๊ธฐ

2021. 4. 14. 18:48ใ†๐Ÿ“š Algorithm/๐Ÿ’ช๐Ÿป Python ๋ฌธ์ œ ํ’€์ด

๋ฐ˜์‘ํ˜•

 

 

14888๋ฒˆ: ์—ฐ์‚ฐ์ž ๋ผ์›Œ๋„ฃ๊ธฐ

์ฒซ์งธ ์ค„์— ์ˆ˜์˜ ๊ฐœ์ˆ˜ N(2 ≤ N ≤ 11)๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„์—๋Š” A1, A2, ..., AN์ด ์ฃผ์–ด์ง„๋‹ค. (1 ≤ Ai ≤ 100) ์…‹์งธ ์ค„์—๋Š” ํ•ฉ์ด N-1์ธ 4๊ฐœ์˜ ์ •์ˆ˜๊ฐ€ ์ฃผ์–ด์ง€๋Š”๋ฐ, ์ฐจ๋ก€๋Œ€๋กœ ๋ง์…ˆ(+)์˜ ๊ฐœ์ˆ˜, ๋บ„์…ˆ(-)์˜ ๊ฐœ์ˆ˜, 

www.acmicpc.net

๋ฌธ์ œ ์„ค๋ช…

N๊ฐœ์˜ ์ˆ˜๋กœ ์ด๋ฃจ์–ด์ง„ ์ˆ˜์—ด A1, A2, ..., AN์ด ์ฃผ์–ด์ง„๋‹ค. ๋˜, ์ˆ˜์™€ ์ˆ˜ ์‚ฌ์ด์— ๋ผ์›Œ๋„ฃ์„ ์ˆ˜ ์žˆ๋Š” N-1๊ฐœ์˜ ์—ฐ์‚ฐ์ž๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์—ฐ์‚ฐ์ž๋Š” ๋ง์…ˆ(+), ๋บ„์…ˆ(-), ๊ณฑ์…ˆ(×), ๋‚˜๋ˆ—์…ˆ(÷)์œผ๋กœ๋งŒ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ์ˆ˜์™€ ์ˆ˜ ์‚ฌ์ด์— ์—ฐ์‚ฐ์ž๋ฅผ ํ•˜๋‚˜์”ฉ ๋„ฃ์–ด์„œ, ์ˆ˜์‹์„ ํ•˜๋‚˜ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. ์ด๋•Œ, ์ฃผ์–ด์ง„ ์ˆ˜์˜ ์ˆœ์„œ๋ฅผ ๋ฐ”๊พธ๋ฉด ์•ˆ ๋œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, 6๊ฐœ์˜ ์ˆ˜๋กœ ์ด๋ฃจ์–ด์ง„ ์ˆ˜์—ด์ด 1, 2, 3, 4, 5, 6์ด๊ณ , ์ฃผ์–ด์ง„ ์—ฐ์‚ฐ์ž๊ฐ€ ๋ง์…ˆ(+) 2๊ฐœ, ๋บ„์…ˆ(-) 1๊ฐœ, ๊ณฑ์…ˆ(×) 1๊ฐœ, ๋‚˜๋ˆ—์…ˆ(÷) 1๊ฐœ์ธ ๊ฒฝ์šฐ์—๋Š” ์ด 60๊ฐ€์ง€์˜ ์‹์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์•„๋ž˜์™€ ๊ฐ™์€ ์‹์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

  • 1+2+3-4×5÷6
  • 1÷2+3+4-5×6
  • 1+2÷3×4-5+6
  • 1÷2×3-4+5+6

์‹์˜ ๊ณ„์‚ฐ์€ ์—ฐ์‚ฐ์ž ์šฐ์„  ์ˆœ์œ„๋ฅผ ๋ฌด์‹œํ•˜๊ณ  ์•ž์—์„œ๋ถ€ํ„ฐ ์ง„ํ–‰ํ•ด์•ผ ํ•œ๋‹ค. ๋˜, ๋‚˜๋ˆ—์…ˆ์€ ์ •์ˆ˜ ๋‚˜๋ˆ—์…ˆ์œผ๋กœ ๋ชซ๋งŒ ์ทจํ•œ๋‹ค. ์Œ์ˆ˜๋ฅผ ์–‘์ˆ˜๋กœ ๋‚˜๋ˆŒ ๋•Œ๋Š” C++14์˜ ๊ธฐ์ค€์„ ๋”ฐ๋ฅธ๋‹ค. ์ฆ‰, ์–‘์ˆ˜๋กœ ๋ฐ”๊พผ ๋’ค ๋ชซ์„ ์ทจํ•˜๊ณ , ๊ทธ ๋ชซ์„ ์Œ์ˆ˜๋กœ ๋ฐ”๊พผ ๊ฒƒ๊ณผ ๊ฐ™๋‹ค. ์ด์— ๋”ฐ๋ผ์„œ, ์œ„์˜ ์‹ 4๊ฐœ์˜ ๊ฒฐ๊ณผ๋ฅผ ๊ณ„์‚ฐํ•ด๋ณด๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

  • 1+2+3-4×5÷6 = 1
  • 1÷2+3+4-5×6 = 12
  • 1+2÷3×4-5+6 = 5
  • 1÷2×3-4+5+6 = 7

N๊ฐœ์˜ ์ˆ˜์™€ N-1๊ฐœ์˜ ์—ฐ์‚ฐ์ž๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์‹์˜ ๊ฒฐ๊ณผ๊ฐ€ ์ตœ๋Œ€์ธ ๊ฒƒ๊ณผ ์ตœ์†Œ์ธ ๊ฒƒ์„ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅํ˜•์‹

์ฒซ์งธ ์ค„์— ์ˆ˜์˜ ๊ฐœ์ˆ˜ N(2 ≤ N ≤ 11)๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„์—๋Š” A1, A2, ..., AN์ด ์ฃผ์–ด์ง„๋‹ค. (1 ≤ Ai ≤ 100) ์…‹์งธ ์ค„์—๋Š” ํ•ฉ์ด N-1์ธ 4๊ฐœ์˜ ์ •์ˆ˜๊ฐ€ ์ฃผ์–ด์ง€๋Š”๋ฐ, ์ฐจ๋ก€๋Œ€๋กœ ๋ง์…ˆ(+)์˜ ๊ฐœ์ˆ˜, ๋บ„์…ˆ(-)์˜ ๊ฐœ์ˆ˜, ๊ณฑ์…ˆ(×)์˜ ๊ฐœ์ˆ˜, ๋‚˜๋ˆ—์…ˆ(÷)์˜ ๊ฐœ์ˆ˜์ด๋‹ค.

์ถœ๋ ฅํ˜•์‹

์ฒซ์งธ ์ค„์— ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์‹์˜ ๊ฒฐ๊ณผ์˜ ์ตœ๋Œ“๊ฐ’์„, ๋‘˜์งธ ์ค„์—๋Š” ์ตœ์†Ÿ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค. ์—ฐ์‚ฐ์ž๋ฅผ ์–ด๋–ป๊ฒŒ ๋ผ์›Œ๋„ฃ์–ด๋„ ํ•ญ์ƒ -10์–ต๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ณ , 10์–ต๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ค๋Š” ์ž…๋ ฅ๋งŒ ์ฃผ์–ด์ง„๋‹ค. ๋˜ํ•œ, ์•ž์—์„œ๋ถ€ํ„ฐ ๊ณ„์‚ฐํ–ˆ์„ ๋•Œ, ์ค‘๊ฐ„์— ๊ณ„์‚ฐ๋˜๋Š” ์‹์˜ ๊ฒฐ๊ณผ๋„ ํ•ญ์ƒ -10์–ต๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ณ , 10์–ต๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ์‹œ

ํ’€์ด ๊ณผ์ •

๋ฐฑํŠธ๋ ˆํ‚น ๋ฌธ์ œ๋ฅผ ๊ทธ ์ „์— ๋งŽ์ด ํ’€์—ˆ์–ด์„œ ์‰ฝ๊ฒŒ ํ’€ ์ˆ˜ ์žˆ์—ˆ๋‹ค. 

backtracking ํ• ๋•Œ plus,minus, multi, div ๊ฐฏ์ˆ˜๊ฐ€ ์กด์žฌํ•˜๋ฉด ๋ชจ๋‘ ์‹คํ–‰ํ•ด์ค˜์„œ min, max๋ฅผ ๊ตฌํ•˜๋ฉด ๋˜๋Š” ๋ฌธ์ œ์˜€๋‹ค.

์ด๋•Œ ์กฐ์‹ฌํ•ด์•ผ๋  ๋ถ€๋ถ„์€ ๋‚˜๋ˆ„๊ธฐ ํ• ๋•Œ ์ด์ „ ํ•ฉ๊ณ„ (sum_value)๊ฐ’์ด 0๋ณด๋‹ค ์ž‘๋‹ค๋ฉด -๋ฅผ ๋ถ™์ธ ๋‹ค์Œ์— ๋‚˜๋ˆ„๊ธฐ ํ›„ -๋ฅผ ๋‹ค์‹œ ๋ถ™์—ฌ์ค˜์•ผํ•œ๋‹ค!


def backtracking(cnt,sum_value, plus, minus, mul, div):
    global min_value, max_value
    if cnt == n:
        min_value = min(min_value,sum_value)
        max_value = max(max_value, sum_value)
        return
    if plus > 0:
        backtracking(cnt+1, sum_value+value[cnt], plus-1, minus, mul, div)
    if minus > 0:
        backtracking(cnt+1, sum_value-value[cnt], plus,minus-1, mul, div)
    if mul > 0:
        backtracking(cnt+1, sum_value*value[cnt], plus,minus, mul-1, div)
    if div > 0:
        if sum_value >= 0:
            backtracking(cnt+1, sum_value//value[cnt], plus,minus, mul, div-1)
        else:
            backtracking(cnt+1, -(-sum_value//value[cnt]),plus,minus,mul, div-1)





if __name__ == '__main__':
    n = int(input())
    value = list(map(int,input().split()))
    plus, minus, multi, div = map(int, input().split())
    max_value = float('-inf')
    min_value = float('inf')
    backtracking(1,value[0], plus, minus,multi, div)
    print(max_value)
    print(min_value)

 

๋ฐ˜์‘ํ˜•