[BAEKJOON]

Lucaยท2023๋…„ 3์›” 29์ผ
0

SWEA

๋ชฉ๋ก ๋ณด๊ธฐ
1/1
post-thumbnail

๐ŸŽˆ๋ฌธ์ œ

5208. [ํŒŒ์ด์ฌ S/W ๋ฌธ์ œํ•ด๊ฒฐ ๊ตฌํ˜„] 5์ผ์ฐจ - ์ „๊ธฐ๋ฒ„์Šค2

์ถฉ์ „์ง€๋ฅผ ๊ตํ™˜ํ•˜๋Š” ๋ฐฉ์‹์˜ ์ „๊ธฐ๋ฒ„์Šค๋ฅผ ์šดํ–‰ํ•˜๋ ค๊ณ  ํ•œ๋‹ค. ์ •๋ฅ˜์žฅ์—๋Š” ๊ต์ฒด์šฉ ์ถฉ์ „์ง€๊ฐ€ ์žˆ๋Š” ๊ตํ™˜๊ธฐ๊ฐ€ ์žˆ๊ณ , ์ถฉ์ „์ง€๋งˆ๋‹ค ์ตœ๋Œ€๋กœ ์šดํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ •๋ฅ˜์žฅ ์ˆ˜๊ฐ€ ์ •ํ•ด์ ธ ์žˆ๋‹ค.

์ถฉ์ „์ง€๊ฐ€ ๋ฐฉ์ „๋˜๊ธฐ ์ „์— ๊ต์ฒดํ•˜๋ฉฐ ์šดํ–‰ํ•ด์•ผ ํ•˜๋Š”๋ฐ ๊ต์ฒดํ•˜๋Š” ์‹œ๊ฐ„์„ ์ค„์ด๋ ค๋ฉด ์ตœ์†Œํ•œ์˜ ๊ต์ฒด ํšŸ์ˆ˜๋กœ ๋ชฉ์ ์ง€์— ๋„์ฐฉํ•ด์•ผ ํ•œ๋‹ค.

์ •๋ฅ˜์žฅ๊ณผ ์ถฉ์ „์ง€์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ, ๋ชฉ์ ์ง€์— ๋„์ฐฉํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ์ตœ์†Œํ•œ์˜ ๊ตํ™˜ํšŸ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“œ์‹œ์˜ค. ๋‹จ, ์ถœ๋ฐœ์ง€์—์„œ์˜ ๋ฐฐํ„ฐ๋ฆฌ ์žฅ์ฐฉ์€ ๊ตํ™˜ํšŸ์ˆ˜์—์„œ ์ œ์™ธํ•œ๋‹ค.

๋‹ค์Œ์€ 1๋ฒˆ์—์„œ ์ถœ๋ฐœ 5๋ฒˆ์ด ์ข…์ ์ธ ๊ฒฝ์šฐ์˜ ์˜ˆ์ด๋‹ค.

์ •๋ฅ˜์žฅ12345
์ถฉ์ „์ง€2311

1๋ฒˆ์—์„œ ์žฅ์ฐฉํ•œ ์ถฉ์ „์ง€ ์šฉ๋Ÿ‰์ด 2์ด๋ฏ€๋กœ, 3๋ฒˆ ์ •๋ฅ˜์žฅ๊นŒ์ง€ ์šดํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ 2๋ฒˆ์—์„œ ๋ฏธ๋ฆฌ ๊ต์ฒดํ•˜๋ฉด ์ข…์ ๊นŒ์ง€ ๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.

๋งˆ์ง€๋ง‰ ์ •๋ฅ˜์žฅ์—๋Š” ๋ฐฐํ„ฐ๋ฆฌ๊ฐ€ ์—†๋‹ค.

[์ž…๋ ฅ]

์ฒซ ์ค„์— ํ…Œ์ŠคํŠธ์ผ€์ด์Šค์˜ ์ˆ˜ T๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. 1<=T<=50

๋‹ค์Œ ์ค„๋ถ€ํ„ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ๋ณ„๋กœ ํ•œ ์ค„์— ์ •๋ฅ˜์žฅ ์ˆ˜ N, N-1๊ฐœ์˜ ์ •๋ฅ˜์žฅ ๋ณ„ ๋ฐฐํ„ฐ๋ฆฌ ์šฉ๋Ÿ‰ Mi๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. 3<=N<=100, 0 ๏ผœ Mi ๏ผœ N

[์ถœ๋ ฅ]

๊ฐ ์ค„๋งˆ๋‹ค "#T" (T๋Š” ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ๋ฒˆํ˜ธ)๋ฅผ ์ถœ๋ ฅํ•œ ๋’ค, ๋‹ต์„ ์ถœ๋ ฅํ•œ๋‹ค


์ž…๋ ฅ
3
5 2 3 1 1
10 2 1 3 2 2 5 4 2 1
10 1 1 2 1 2 2 1 2 1

์ถœ๋ ฅ
#1 1
#2 2
#3 5


๐Ÿ“ํ’€์ด

  • N์ด ์ตœ๋Œ€ 100๊นŒ์ง€ ๊ฐ€๋Š” ๊ฒƒ์„ ๋ณด๋ฉด์„œ ๊ทธ๋ฆฌ๋“œ๋‚˜ ๋ฐฑํŠธ๋ž˜ํ‚น์œผ๋กœ ๋ฌธ์ œ๋ฅผ ํ’€์–ด์•ผ ๋œ๋‹ค๊ณ  ์ƒ๊ฐ ํ•ด์•ผ ํ•œ๋‹ค.
  • ๋ฐฐํ„ฐ๋ฆฌ๋ฅผ ๊ต์ฒดํ•˜๋Š” ๊ฒƒ์€ ๊ต์ฒดO / ๊ต์ฒดX ๋ผ๋Š” ๋‘๊ฐ€์ง€ ์„ ํƒ์ง€๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ ์ด์ง„ํŠธ๋ฆฌ ํ˜•์‹์œผ๋กœ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋ฐฑํŠธ๋ž˜ํ‚น์œผ๋กœ ํ’€์–ด๋ณด์ž

๐Ÿ“์กฐ๊ฑด

  • 1<=T<=50
  • 3<=N<=100, 0 ๏ผœ Mi ๏ผœ N

๐Ÿ“ํ’€์ด์ˆœ์„œ

  • ์ž…๋ ฅํ•˜๋Š” ๊ฐ’์ด lst์— ํ•œ์ค„์— ์ฃผ์–ด์ง„๋‹ค๋Š” ์ ์„ ๊ณ ๋ คํ•ด N์„ ์ž‘์„ฑ
  • DFS๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ณผ์ •์—์„œ ํ•„์š”ํ•œ ๊ฒƒ์€ (lst์˜ ์ธ๋ฑ์Šค n, ๋ฐฐํ„ฐ๋ฆฌ๋ฅผ ๊ตํ™˜ํ•˜๋Š” ํšŸ์ˆ˜ cnt, ๋ฐฐํ„ฐ๋ฆฌ์˜ ์ž”๋Ÿ‰ sm)
  • ๊ฐ€์ง€์น˜๊ธฐ / ๊ธฐ์ € ์กฐ๊ฑด(ํ•จ์ˆ˜๋ฅผ ์ข…๋ฃŒํ•˜๋Š” ์กฐ๊ฑด) / ๋ฉ”์ธ๋กœ์ง์„ ์ž‘์„ฑํ•œ๋‹ค.
  • ๋ฉ”์ธ ๋กœ์ง์—์„œ ๋ฐฐํ„ฐ๋ฆฌ ๊ต์ฒดO / ๊ต์ฒดx ํ•˜๋Š” ๊ฒฝ์šฐ์— ๋”ฐ๋ฅธ ์žฌ๊ท€๋ฅผ ์ง„ํ–‰ํ•œ๋‹ค.
    โญ์œ ๋งํ•œ ๋‹ต์ด ๋จผ์ € ๋‚˜์˜ค๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ์žฌ๊ท€๋ฅผ ์ง„ํ–‰ํ•˜๋ฉฐ ์‹œ๊ฐ„์„ ์ ˆ์•ฝ

๐Ÿ’ป์ฝ”๋“œ1 (์‹คํ–‰์‹œ๊ฐ„ 705ms)

def dfs(n, cnt, sm):
    global ans
    # ๊ฐ€์ง€์น˜๊ธฐ
    if ans <= cnt:
        return

    # ๊ธฐ์ € ์กฐ๊ฑด
    if n == N:
        ans = min(ans, cnt)
        return

    # ๋ฉ”์ธ ๋กœ์ง 
    dfs(n+1, cnt+1, lst[n]-1) # ์ถฉ์ „๊ธฐ ๊ตํ™˜์„ ํ•  ๋•Œ
    if sm > 0:
        dfs(n+1, cnt, sm-1) # ์ถฉ์ „๊ธฐ ๊ตํ™˜์„ ํ•˜์ง€ ์•Š์„ ๋•Œ
    

T = int(input())
for tc in range(1, T+1):
    lst = list(map(int, input().split()))
    N = lst[0]

    # ์ตœ๋Œ€๋กœ ์ถฉ์ „๊ธฐ๋ฅผ ๊ตํ™˜ํ•˜๋Š” ํšŸ์ˆ˜
    ans = N
    dfs(2, 0, lst[1]-1)

    # ์ถœ๋ ฅ
    print(f'#{tc} {ans}')

๐Ÿ’ป์ฝ”๋“œ2 (์‹คํ–‰์‹œ๊ฐ„ 337ms)

def dfs(n, cnt, sm):
    global ans
    # ๊ฐ€์ง€์น˜๊ธฐ
    if ans <= cnt:
        return

    # ๊ธฐ์ € ์กฐ๊ฑด
    if n == N:
        ans = min(ans, cnt)
        return

    # ๋ฉ”์ธ ๋กœ์ง 
    # ์œ ๋งํ•œ ๋‹ต์ด ๋จผ์ € ๋‚˜์˜ค๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ํ˜ธ์ถœ์„ ์ง„ํ–‰ํ•˜๋ฉด ๊ฐ€์ง€์น˜๊ธฐ๋ฅผ ์‹œ๊ฐ„์„ ์•„๋‚„ ์ˆ˜ ์žˆ๋‹ค.
    if sm > 0:
        dfs(n+1, cnt, sm-1) # ์ถฉ์ „๊ธฐ ๊ตํ™˜์„ ํ•˜์ง€ ์•Š์„ ๋•Œ
    dfs(n+1, cnt+1, lst[n]-1) # ์ถฉ์ „๊ธฐ ๊ตํ™˜์„ ํ•  ๋•Œ
    
    

T = int(input())
for tc in range(1, T+1):
    lst = list(map(int, input().split()))
    N = lst[0]

    # ์ตœ๋Œ€๋กœ ์ถฉ์ „๊ธฐ๋ฅผ ๊ตํ™˜ํ•˜๋Š” ํšŸ์ˆ˜
    ans = N
    dfs(2, 0, lst[1]-1)

    # ์ถœ๋ ฅ
    print(f'#{tc} {ans}')

โญ์ฝ”๋“œ์— ๋”ฐ๋ฅธ ์‹œ๊ฐ„ ์ฐจ์ด

  • ์ฝ”๋“œ1 (์‹คํ–‰์‹œ๊ฐ„ 705ms)
  • ์ฝ”๋“œ2 (์‹คํ–‰์‹œ๊ฐ„ 337ms)

๊ทธ ์ด์œ ๋Š”? (ํ‹€๋ฆฐ ๊ทธ๋ฆผ ์ฐพ๊ธฐ)

0๊ฐœ์˜ ๋Œ“๊ธ€