ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

728x90
๋ฐ˜์‘ํ˜•

1, 2, 3 ๋”ํ•˜๊ธฐ ์‹œ๋ฆฌ์ฆˆ

 

๋ฌธ์ œ

 

12101๋ฒˆ: 1, 2, 3 ๋”ํ•˜๊ธฐ 2

n์„ 1, 2, 3์˜ ํ•ฉ์œผ๋กœ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฐฉ๋ฒ• ์ค‘์—์„œ ์‚ฌ์ „ ์ˆœ์œผ๋กœ k๋ฒˆ์งธ์— ์˜ค๋Š” ๊ฒƒ์„ ์ถœ๋ ฅํ•œ๋‹ค. k๋ฒˆ์งธ ์˜ค๋Š” ์‹์ด ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” -1์„ ์ถœ๋ ฅํ•œ๋‹ค.

www.acmicpc.net

 

๋ฌธ์ œ ํ’€์ด

 1, 2, 3์„ ํ™œ์šฉํ•˜์—ฌ N์„ ๊ตฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜ ์ค‘ K ๋ฒˆ์งธ์˜ ์ˆ˜์‹์„ ์ถœ๋ ฅํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค. ๋ฌธ์ œ์˜ ๊ฒฝ์šฐ N์˜ ํฌ๊ธฐ๊ฐ€ ํฌ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— DFS๋กœ ๋ฐฑํŠธ๋ž™ํ‚นํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ์‰ฝ๊ฒŒ ํ’€ ์ˆ˜ ์žˆ๋‹ค.

 

  • ์žฌ๊ท€ ํ˜ธ์ถœ์„ ํ•˜๋ฉด์„œ ๊ตฌํ•œ ์ˆ˜์˜ ํ•ฉ์ด N๋ณด๋‹ค ํฌ๋‹ค๋ฉด, ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š๊ณ  ์ค‘๋‹จํ•œ๋‹ค.
  • ๋งŒ์•ฝ ๊ตฌํ•œ ์ˆ˜์˜ ํ•ฉ์ด N์ด ๋˜์—ˆ๋‹ค๋ฉด ์นด์šดํŠธ ํ•˜๊ณ , K๊ฐ€ ๋˜๋ฉด ์ˆ˜์‹์„ ์ถœ๋ ฅํ•œ๋‹ค.
    • ์ด๋Š” DFS์˜ ๊ฒฝ์šฐ `1 + 1 + 1 + 1`, `1 + 1 + 2`, `1 + 2 + 1`๊ณผ ๊ฐ™์€ ์ˆœ์„œ๋กœ ํƒ์ƒ‰์„ ์ง„ํ–‰ํ•˜๊ธฐ์— ๊ฐ€๋Šฅํ•˜๋‹ค.
  • DFS๋ฅผ ํ†ตํ•ด ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ํƒ์ƒ‰ํ•˜์˜€์Œ์—๋„ ๋‹ต์„ ์ฐพ์ง€ ๋ชปํ•œ๋‹ค๋ฉด -1์„ ์ถœ๋ ฅํ•œ๋‹ค.

 

์ฝ”๋“œ

from sys import stdin


def dfs(idx, sum_num, check):
    global cnt
    # n๋ณด๋‹ค ํฐ ๊ฒฝ์šฐ ํ™•์ธํ•  ํ•„์š” ์—†์Œ.
    if sum_num > n:
        return

    if n == sum_num:
        # k๋ฒˆ์งธ ์ˆ˜๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•จ
        cnt += 1
        if cnt == k:
            # ์ˆซ์ž+์ˆซ์ž+์ˆซ์ž+๋กœ ๊ธฐ๋กํ•˜๋ฏ€๋กœ, ๋งˆ์ง€๋ง‰์„ ์ œ๊ฑฐํ•˜๊ณ  ์ถœ๋ ฅ.
            print(''.join(check)[:-1])
            exit(0)

    for i in range(1, 4):
        check.append(str(i) + '+')
        dfs(idx + 1, sum_num + i, check)
        check.pop()


if __name__ == '__main__':
    cnt = 0
    n, k = map(int, stdin.readline().split())
    dfs(0, 0, [])
    print(-1)
728x90
๋ฐ˜์‘ํ˜•
๋Œ“๊ธ€
๊ธ€ ๋ณด๊ด€ํ•จ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€