[๋ฐฑ์ค€] 10942 ํŒฐ๋ฆฐ๋“œ๋กฌ? (python ํŒŒ์ด์ฌ)

2022. 8. 17. 03:54ยท๐Ÿงฉ Problem Solving/[๋ฐฑ์ค€]

https://www.acmicpc.net/problem/10942

 

10942๋ฒˆ: ํŒฐ๋ฆฐ๋“œ๋กฌ?

์ด M๊ฐœ์˜ ์ค„์— ๊ฑธ์ณ ํ™์ค€์ด์˜ ์งˆ๋ฌธ์— ๋Œ€ํ•œ ๋ช…์šฐ์˜ ๋‹ต์„ ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง„ ์ˆœ์„œ์— ๋”ฐ๋ผ์„œ ์ถœ๋ ฅํ•œ๋‹ค. ํŒฐ๋ฆฐ๋“œ๋กฌ์ธ ๊ฒฝ์šฐ์—๋Š” 1, ์•„๋‹Œ ๊ฒฝ์šฐ์—๋Š” 0์„ ์ถœ๋ ฅํ•œ๋‹ค.

www.acmicpc.net


๋ฐฐ์—ด์—์„œ i๋ถ€ํ„ฐ j๊นŒ์ง€๊ฐ€ ํŒฐ๋ฆฐ๋“œ๋กฌ์ธ์ง€ ์•„๋‹Œ์ง€ ์—ฌ๋Ÿฌ ๋ฒˆ ํ™•์ธํ•˜๋Š” ๋ฌธ์ œ.

 


์•„์ด๋””์–ด

1. dp

  • ๊ฐ„๋‹จํ•˜๊ฒŒ ๋ฆฌ์ŠคํŠธ ์Šฌ๋ผ์ด์‹ฑ์œผ๋กœ๋Š” ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋‚˜์„œ dp๋ฅผ ์‚ฌ์šฉ
  • i๋ฒˆ์งธ๋ถ€ํ„ฐ j๊นŒ์ง€์˜ ์ˆ˜๊ฐ€ ํŒฐ๋ฆฐ๋“œ๋กฌ์ธ์ง€ ํ™•์ธํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ์ด์ฐจ์› ๋ฆฌ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ๋‹ค.

2. ์ ํ™”์‹

  • ๋จผ์ € ๋ฌด์กฐ๊ฑด ํŒฐ๋ฆฐ๋“œ๋กฌ์ธ i๋ถ€ํ„ฐ i๊นŒ์ง€์˜ ์ˆ˜๋Š” 1๋กœ ์ €์žฅํ•ด๋‘”๋‹ค.
  • ๊ทธ๋ฆฌ๊ณ  i๋ฒˆ์งธ ์ˆ˜์™€ i + 1๋ฒˆ์งธ ์ˆ˜๊ฐ€ ๊ฐ™์œผ๋ฉด ํŒฐ๋ฆฐ๋“œ๋กฌ์ด๋‹ˆ๊นŒ ์ด๊ฒƒ๋„ 1๋กœ ์ €์žฅ.
  • ์ ํ™”์‹์€ ์ด๋ฏธ ํŒฐ๋ฆฐ๋“œ๋กฌ์ธ ์ˆ˜ ์–‘ ์˜†์— ์˜ค๋Š” ๋‘ ์ˆ˜๊ฐ€ ๊ฐ™๋‹ค๋ฉด ๊ทธ๊ฒƒ๋„ ํŒฐ๋ฆฐ๋“œ๋กฌ์ด๋‹ค.
  • ์˜ˆ๋ฅผ ๋“ค์–ด 121์ด๋ผ๋Š” ํŒฐ๋ฆฐ๋“œ๋กฌ ์ˆ˜์—์„œ ์–‘ ์˜†์— 3 ์ด ๋ถ™๋Š” ๋‹ค๋ฉด 31213 ๋„ ํŒฐ๋ฆฐ๋“œ๋กฌ์ด๋‹ค.

์ „์ฒด ์ฝ”๋“œ

import sys
N = int(input())

num_arr = [int(x) for x in input().split()]

M = int(input())

DP = [[0] * (N) for _ in range(N)] # DP[i][j] i๋ถ€ํ„ฐ j๊นŒ์ง€

for i in range(N): # len == 1
    DP[i][i] = 1

for i in range(N - 1): # len == 2
    if num_arr[i] == num_arr[i + 1]:
        DP[i][i + 1] = 1

for num_len in range(2, N): # len >= 3
    for start in range(N - num_len):
        end = start + num_len
        if num_arr[start] == num_arr[end]:
            if DP[start + 1][end - 1] == 1:
                DP[start][end] = 1

for _ in range(M):
    S, E = map(int, sys.stdin.readline().split())
    print(DP[S - 1][E - 1])

์ฝ”๋“œ ์„ค๋ช…

for i in range(N): # len == 1
    DP[i][i] = 1

for i in range(N - 1): # len == 2
    if num_arr[i] == num_arr[i + 1]:
        DP[i][i + 1] = 1

์œ„์—์„œ ์„ค๋ช…ํ•œ ์ˆ˜์˜ ๊ธธ์ด๊ฐ€ 1์ด๋‚˜ 2์ผ ๋•Œ ํŒฐ๋ฆฐ๋“œ๋กฌ ์ธ์ง€ ํ™•์ธํ•˜๋Š” ์ฝ”๋“œ๋‹ค.

 

for num_len in range(2, N): # len >= 3
    for start in range(N - num_len):
        end = start + num_len
        if num_arr[start] == num_arr[end]:
            if DP[start + 1][end - 1] == 1:
                DP[start][end] = 1

์ดํ›„ ์ˆ˜์˜ ๊ธธ์ด๊ฐ€ 3 ์ด์ƒ์ธ ๊ฒฝ์šฐ๋ถ€ํ„ฐ ํŒฐ๋ฆฐ๋“œ๋กฌ์ธ์ง€ ํ™•์ธํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

๋งŒ์•ฝ DP[start + 1][end - 1] == 1(start + 1 ๋ฒˆ์งธ๋ถ€ํ„ฐ end - 1๊นŒ์ง€์˜ ์ˆ˜๊ฐ€ ํŒฐ๋ฆฐ๋“œ๋กฌ)์ด๊ณ 

start๋ฒˆ์งธ ์ˆ˜์™€ end๋ฒˆ์งธ ์ˆ˜๊ฐ€ ๊ฐ™๋‹ค๋ฉด DP [start][end] = 1์ด๋‹ค.

 

์ดํ›„ ์ด์ค‘ for๋ฌธ์„ ์งœ๋Š”๋ฐ ์ฃผ์˜ํ•  ์ ์ด ์žˆ๋‹ค.

๋งŒ์•ฝ ์ด์ค‘ for๋ฌธ์„ ๊ทธ๋ƒฅ ํ”ํžˆ ์ž‘์„ฑํ•˜๋“ฏ 0 0, 0 1... ์ด๋Ÿฐ ์‹์œผ๋กœ ์ž‘์„ฑํ•˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด DP[2][6]์˜ ๊ฐ’์„ ์ •ํ•˜๋ ค๋ฉด DP[3][5]์˜ ๊ฐ’์„ ์•Œ์•„์•ผ ํ•œ๋‹ค. 

ํ•˜์ง€๋งŒ ์ผ๋ฐ˜์ ์ธ ์ด์ค‘ for๋ฌธ์—์„œ๋Š” ์•„์ง DP[3][5]์˜ ๊ฐ’์ด ์ •ํ•ด์ ธ ์žˆ์ง€ ์•Š์œผ๋ฏ€๋กœ ์ œ๋Œ€๋กœ ๊ฐ’์ด ์ž…๋ ฅ๋˜์ง€ ๋ชปํ•œ๋‹ค.

 

์ด ๊ฒฝ์šฐ๋ฅผ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ด์ค‘ for๋ฌธ์—์„œ ์ฒซ ๋ฒˆ์งธ for๋ฌธ์„ ์‹œ์ž‘์ (start)์ด ์•„๋‹Œ ์ˆ˜์˜ ๊ธธ์ด(num_len)๋กœ ์„ค์ •ํ•˜๋ฉด ๋œ๋‹ค.

์ด๋ ‡๊ฒŒ ์ž‘์„ฑํ•˜๋ฉด ์ด๋ฏธ ์ด์ „์— ์ˆ˜์˜ ๊ธธ์ด๊ฐ€ 1๊ณผ 2 ์ธ ๊ฒƒ์€ ์ด๋ฏธ ํ™•์ธํ–ˆ์œผ๋ฏ€๋กœ ๋ฐ”๋กœ ์ˆ˜์˜ ๊ธธ์ด๊ฐ€ 3์ธ ๊ฒƒ๋ถ€ํ„ฐ ์ฐจ๋ก€๋Œ€๋กœ ์ฑ„์›Œ ๋‚˜๊ฐ€๋ฉด ๋œ๋‹ค.

์ €์ž‘์žํ‘œ์‹œ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'๐Ÿงฉ Problem Solving > [๋ฐฑ์ค€]' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[๋ฐฑ์ค€] 14938 ์„œ๊ฐ•๊ทธ๋ผ์šด๋“œ (python ํŒŒ์ด์ฌ)  (0) 2022.09.10
[๋ฐฑ์ค€]11660 ๊ตฌ๊ฐ„ ํ•ฉ ๊ตฌํ•˜๊ธฐ 5 (python ํŒŒ์ด์ฌ)  (0) 2022.08.19
[๋ฐฑ์ค€] 1647 ๋„์‹œ ๋ถ„ํ•  ๊ณ„ํš (python ํŒŒ์ด์ฌ)  (0) 2022.08.01
[๋ฐฑ์ค€] 1644 ์†Œ์ˆ˜์˜ ์—ฐ์†ํ•ฉ (python ํŒŒ์ด์ฌ)  (0) 2022.07.31
[๋ฐฑ์ค€] 9466 ํ…€ ํ”„๋กœ์ ํŠธ (python ํŒŒ์ด์ฌ)  (0) 2022.07.31
'๐Ÿงฉ Problem Solving/[๋ฐฑ์ค€]' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [๋ฐฑ์ค€] 14938 ์„œ๊ฐ•๊ทธ๋ผ์šด๋“œ (python ํŒŒ์ด์ฌ)
  • [๋ฐฑ์ค€]11660 ๊ตฌ๊ฐ„ ํ•ฉ ๊ตฌํ•˜๊ธฐ 5 (python ํŒŒ์ด์ฌ)
  • [๋ฐฑ์ค€] 1647 ๋„์‹œ ๋ถ„ํ•  ๊ณ„ํš (python ํŒŒ์ด์ฌ)
  • [๋ฐฑ์ค€] 1644 ์†Œ์ˆ˜์˜ ์—ฐ์†ํ•ฉ (python ํŒŒ์ด์ฌ)
์ œ๋ด‰์•„
์ œ๋ด‰์•„
  • ์ œ๋ด‰์•„
    Overthinking
    ์ œ๋ด‰์•„
    fake it till you make it.
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (104)
      • ๐Ÿงฉ Problem Solving (83)
        • [๋ฐฑ์ค€] (74)
        • [ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] (7)
        • [SW Expert Academy] (1)
        • [์•Œ๊ณ ๋ฆฌ์ฆ˜ for PS] (1)
      • ๐Ÿ“ฆ Data Structure (2)
      • ๐Ÿ“œ Language (14)
        • [python] (14)
      • ๐Ÿ–ค Git (1)
      • ๐ŸŒ† ์ผ์ƒ (2)
        • ๐Ÿ’ฌ ๋ฒฝ๋ณด๊ณ  ๋งํ•˜๊ธฐ (2)
      • ๐Ÿ—„๏ธ ๊ธฐํƒ€ (2)
      • ๐Ÿ”ต css (0)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
  • ๋งํฌ

  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    ๋ฐ๋ธŒ์ฝ”์Šค
    ๋ธŒ๋ฃจํŠธํฌ์Šค
    ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค
    slicing
    boj
    ๋ถ€๋ถ„ํ•ฉ
    DFS
    ํŒฐ๋ฆฐ๋“œ๋กฌ
    BFS
    Bruteforce
    ๋ƒ…์ƒ‰
    DP
    ์œ„์ƒ์ •๋ ฌ
    ํ”Œ๋กœ์ด๋“œ์›Œ์…œ
    ๊ทธ๋ฆฌ๋””
    ๋‹ค์ต์ŠคํŠธ๋ผ
    ํŒŒ์ด์ฌ
    imos
    ์Šคํƒ
    ํˆฌํฌ์ธํ„ฐ
    ๋ถ„ํ•  ์ •๋ณต
    ๋ฐฑ์ค€
    ๋ฐฑํŠธ๋ž˜ํ‚น
    SWEA
    ์ •์ฒ˜๊ธฐ
    ํ”Œ๋กœ์ด๋“œ ์™€์ƒฌ
    ๊ตฌํ˜„
    ์žฌ๊ท€
    ๋ˆ„์ ํ•ฉ
    Python
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
์ œ๋ด‰์•„
[๋ฐฑ์ค€] 10942 ํŒฐ๋ฆฐ๋“œ๋กฌ? (python ํŒŒ์ด์ฌ)
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”