์•Œ๊ณ ๋ฆฌ์ฆ˜/๊ตฌํ˜„

[๋ฐฑ์ค€ 7490 ๐Ÿฅ‡] 0 ๋งŒ๋“ค๊ธฐ

1eehyunji 2023. 8. 11. 00:07

๋ฌธ์ œ

1๋ถ€ํ„ฐ N๊นŒ์ง€์˜ ์ˆ˜๋ฅผ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์“ด ์ˆ˜์—ด 1 2 3 ... N์„ ์ƒ๊ฐํ•˜์ž.

๊ทธ๋ฆฌ๊ณ  '+'๋‚˜ '-', ๋˜๋Š” ' '(๊ณต๋ฐฑ)์„ ์ˆซ์ž ์‚ฌ์ด์— ์‚ฝ์ž…ํ•˜์ž(+๋Š” ๋”ํ•˜๊ธฐ, -๋Š” ๋นผ๊ธฐ, ๊ณต๋ฐฑ์€ ์ˆซ์ž๋ฅผ ์ด์–ด ๋ถ™์ด๋Š” ๊ฒƒ์„ ๋œปํ•œ๋‹ค). ์ด๋ ‡๊ฒŒ ๋งŒ๋“  ์ˆ˜์‹์˜ ๊ฐ’์„ ๊ณ„์‚ฐํ•˜๊ณ  ๊ทธ ๊ฒฐ๊ณผ๊ฐ€ 0์ด ๋  ์ˆ˜ ์žˆ๋Š”์ง€๋ฅผ ์‚ดํ”ผ์ž.

N์ด ์ฃผ์–ด์กŒ์„ ๋•Œ ์ˆ˜์‹์˜ ๊ฒฐ๊ณผ๊ฐ€ 0์ด ๋˜๋Š” ๋ชจ๋“  ์ˆ˜์‹์„ ์ฐพ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜๋ผ.

์ž…๋ ฅ

์ฒซ ๋ฒˆ์งธ ์ค„์— ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ๊ฐœ์ˆ˜๊ฐ€ ์ฃผ์–ด์ง„๋‹ค(<10).

๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์—” ์ž์—ฐ์ˆ˜ N์ด ์ฃผ์–ด์ง„๋‹ค(3 <= N <= 9).

์ถœ๋ ฅ

๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์— ๋Œ€ํ•ด ASCII ์ˆœ์„œ์— ๋”ฐ๋ผ ๊ฒฐ๊ณผ๊ฐ€ 0์ด ๋˜๋Š” ๋ชจ๋“  ์ˆ˜์‹์„ ์ถœ๋ ฅํ•œ๋‹ค. ๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ๊ฒฐ๊ณผ๋Š” ํ•œ ์ค„์„ ๋„์›Œ ๊ตฌ๋ถ„ํ•œ๋‹ค.

๋ฌธ์ œํ’€์ด

import sys

t=int(sys.stdin.readline())

def calculate(express):
    if ' ' in express:
        express=express.replace(' ','')
    return eval(express)

def combination(num, arr):
    global n, ans
    if num==n:
        if calculate(arr)==0:
            ans.append(arr)
        return
    combination(num+1, arr+'+'+str(num+1))
    combination(num+1, arr+'-'+str(num+1))
    combination(num+1, arr+' '+str(num+1))

for _ in range(t):
    n=int(sys.stdin.readline())
    ans=[]
    combination(1, '1')
    ans.sort()
    for a in ans:
        print(a)
    print('')
  • ์žฌ๊ท€ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด์„œ n์„ ์ž…๋ ฅ๋ฐ›์•„์„œ ๋งŒ๋“ค์–ด๋‚ผ ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ์ˆ˜์‹๋“ค์„ ํƒ์ƒ‰ํ•œ๋‹ค.
  • ์žฌ๊ท€ํ•จ์ˆ˜ combination์—์„œ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜, ๋นผ๊ฑฐ๋‚˜, ์ด์–ด์ฃผ๋Š” ์ˆซ์ž num์ด n์ด๋ผ๋ฉด ์ฆ‰, arr๊ฐ€ 1๋ถ€ํ„ฐ n๊นŒ์ง€ ํฌํ•จํ•˜๋Š” ๋ฌธ์ž์—ด์ด๋ผ๋ฉด calculate ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด์„œ ํ•ด๋‹น ์ˆ˜์‹์˜ ๊ฐ’์ด 0์ธ์ง€ ํ™•์ธํ•œ๋‹ค.
  • 0์ด๋ผ๋ฉด ๋ฐฐ์—ด ans์— ์ถ”๊ฐ€ํ•ด์ค€๋‹ค.
  • calculate ํ•จ์ˆ˜์—์„  ๋จผ์ € ์ˆ˜์‹์˜ ๊ณต๋ฐฑ์„ replace๋ฅผ ์ด์šฉํ•ด์„œ ์ œ๊ฑฐํ•ด์ค€๋‹ค.
  • ์—ฌ๊ธฐ์„œ replace๋Š” sortํ•จ์ˆ˜์ฒ˜๋Ÿผ ๋ฆฌํ„ด๊ฐ’ ์—†์ด ์ง์ ‘์ ์œผ๋กœ ํ•ด๋‹น ๋ฌธ์ž์—ด์— ๋ณ€ํ™˜์„ ์ฃผ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ๋ฐ˜ํ™˜ ๊ฐ’์„ ์ฃผ๋Š” ๊ฒƒ์ด๋ฏ€๋กœ express=express.replace(' ','')์˜ ๋ฐ˜ํ™˜๊ฐ’์„ express์— ๋Œ€์ž…ํ•ด์ค˜์•ผ ์ •์ƒ์ ์œผ๋กœ ๊ณ„์‚ฐ๋œ๋‹ค.
  • ๊ณต๋ฐฑ์ด ์ œ๊ฑฐ๋œ express๋ฅผ ๋ฌธ์ž์—ด ์ˆ˜์‹์„ ๊ณ„์‚ฐํ•ด์ฃผ๋Š” ํŒŒ์ด์ฌ ๋‚ด์žฅํ•จ์ˆ˜ eval()์„ ์ด์šฉํ•ด์„œ ๊ณ„์‚ฐํ•œ๋‹ค.
  • ๋งˆ์ง€๋ง‰์œผ๋กœ ans์— ์ €์žฅ๋œ ๋ฌธ์ž์—ด๋“ค์„ ์•„์Šคํ‚ค ์ฝ”๋“œ์ˆœ์œผ๋กœ ์ •๋ ฌํ•ด์ค€ ๋’ค์— ์ถœ๋ ฅํ•ด์ค€๋‹ค.