b10942. ํŽ ๋ฆฐ๋“œ๋กฌ?

2025. 5. 20. 14:40ยทAlgorithm & Data Structures/BOJ

 

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

 

 

 

 

๐Ÿ” ์ž๋ฐ”๋กœ ํ‘ธ๋Š” ํŽ ๋ฆฐ๋“œ๋กฌ? ๋ฌธ์ œ ํ’€์ด (๋ฐฑ์ค€ 10942)

 

 

๐Ÿ“Œ ๋ฌธ์ œ ๊ฐœ์š”

 

  • ์ˆ˜์—ด์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, ํŠน์ • ๊ตฌ๊ฐ„์ด ํŽ ๋ฆฐ๋“œ๋กฌ(ํšŒ๋ฌธ)์ธ์ง€ ๋น ๋ฅด๊ฒŒ ํŒ๋ณ„ํ•ด์•ผ ํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.
  • ์งˆ์˜๊ฐ€ ์ตœ๋Œ€ 100๋งŒ ๋ฒˆ๊นŒ์ง€ ์ฃผ์–ด์ง€๋ฏ€๋กœ, ๋‹จ์ˆœํ•œ ๋น„๊ต๋กœ๋Š” ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

 


 

๐Ÿ’ก ์˜ˆ์ œ ์ž…๋ ฅ

7
1 2 1 3 1 2 1
4
1 3
2 5
3 3
5 7

 

์˜ˆ์ œ ์ถœ๋ ฅ

1  
0  
1  
1

 


 

๐Ÿ›  ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ ‘๊ทผ ๋ฐฉ์‹

 

์ด ๋ฌธ์ œ๋Š” DP(Dynamic Programming) ์„ ํ™œ์šฉํ•ด

๋ชจ๋“  ๊ฐ€๋Šฅํ•œ ๊ตฌ๊ฐ„์— ๋Œ€ํ•ด ํŽ ๋ฆฐ๋“œ๋กฌ ์—ฌ๋ถ€๋ฅผ ๋ฏธ๋ฆฌ ๊ณ„์‚ฐํ•œ ๋’ค,

์งˆ์˜์— ๋Œ€ํ•ด ๋น ๋ฅด๊ฒŒ ์‘๋‹ตํ•˜๋Š” ๊ตฌ์กฐ๋กœ ํ’€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 


 

โœ… ํ•ต์‹ฌ ์•„์ด๋””์–ด

 

  • isAns[s][e] = true if arr[s] == arr[e] and isAns[s+1][e-1] == true
  • 1๊ธ€์ž, 2๊ธ€์ž์งœ๋ฆฌ ๊ตฌ๊ฐ„์€ ์ง์ ‘ ๋น„๊ต๋กœ ์ดˆ๊ธฐํ™”
  • ์ดํ›„ ๊ธธ์ด 3 ์ด์ƒ์ธ ๊ตฌ๊ฐ„์€ ์ ํ™”์‹์œผ๋กœ ์ฑ„์›Œ๋‚˜๊ฐ

 


 

๐Ÿงพ ์ฝ”๋“œ ํ•ด์„ค

 

 

๐ŸŽฏ ์ž…๋ ฅ ๋ฐ ๋ฐฐ์—ด ์ดˆ๊ธฐํ™”

int N = Integer.parseInt(br.readLine());
int[] arr = Arrays.stream(br.readLine().split(" ")).mapToInt(Integer::parseInt).toArray();
boolean[][] isAns = new boolean[N][N];

 


 

โœ๏ธ 1๊ธ€์ž, 2๊ธ€์ž ๊ตฌ๊ฐ„ ์ดˆ๊ธฐํ™”

for (int i = 0 ; i < N ; i++) {
    isAns[i][i] = true;
    if(i != N-1 && arr[i] == arr[i+1]) isAns[i][i+1] = true;
}

 

  • ์ž๊ธฐ ์ž์‹  ํ•˜๋‚˜๋Š” ํ•ญ์ƒ ํŽ ๋ฆฐ๋“œ๋กฌ
  • ๋ฐ”๋กœ ์˜† ์ˆซ์ž๊ฐ€ ๊ฐ™๋‹ค๋ฉด ๊ธธ์ด 2์˜ ํŽ ๋ฆฐ๋“œ๋กฌ

 


 

๐Ÿ” ๊ธธ์ด 3 ์ด์ƒ ๊ตฌ๊ฐ„ ์ฑ„์šฐ๊ธฐ (DP)

for (int len = 2; len < N; len++) {
    for (int s = 0; s + len < N; s++) {
        int e = s + len;
        if (arr[s] == arr[e] && isAns[s + 1][e - 1]) {
            isAns[s][e] = true;
        }
    }
}

 

  • ์ ์  ๊ธธ์–ด์ง€๋Š” ๊ตฌ๊ฐ„์„ ํ™•์ธํ•˜๋ฉฐ,
  • ์–‘ ๋์ด ๊ฐ™๊ณ , ์•ˆ์ชฝ์ด ํŽ ๋ฆฐ๋“œ๋กฌ์ด๋ฉด ์ „์ฒด๋„ ํŽ ๋ฆฐ๋“œ๋กฌ

 


 

๐Ÿ“ฅ ์งˆ์˜ ์ฒ˜๋ฆฌ

int M = Integer.parseInt(br.readLine());
for(int i = 0; i < M; i++) {
    StringTokenizer st = new StringTokenizer(br.readLine());
    int a = Integer.parseInt(st.nextToken())-1;
    int b = Integer.parseInt(st.nextToken())-1;
    sb.append(isAns[a][b]?1:0).append("\n");
}

 

  • ๋ฏธ๋ฆฌ ๊ณ„์‚ฐํ•œ isAns๋ฅผ ์ด์šฉํ•˜์—ฌ O(1) ์‹œ๊ฐ„์œผ๋กœ ์งˆ์˜์— ๋‹ต๋ณ€

 


 

โœ… ํ•ต์‹ฌ ํฌ์ธํŠธ ์š”์•ฝ

ํฌ์ธํŠธ ์„ค๋ช…
DP ์‚ฌ์šฉ ์ค‘๋ณต ์—ฐ์‚ฐ ์—†์ด ๋ชจ๋“  ๊ตฌ๊ฐ„์— ๋Œ€ํ•œ ํšŒ๋ฌธ ์—ฌ๋ถ€ ์‚ฌ์ „ ๊ณ„์‚ฐ
2์ฐจ์› ๋ฐฐ์—ด isAns[start][end]๋กœ ๊ตฌ๊ฐ„ ๊ด€๋ฆฌ
O(Nยฒ) ์‚ฌ์ „ ์ฒ˜๋ฆฌ + O(1) ์งˆ์˜ ๋งค์šฐ ํšจ์œจ์ ์ธ ์‹œ๊ฐ„๋ณต์žก๋„ ๊ตฌ์„ฑ
์˜คํ”„์…‹ ์ฃผ์˜ ์ž…๋ ฅ์€ 1-indexed โ†’ ๋‚ด๋ถ€ ๋ฐฐ์—ด์€ 0-indexed

 


 

๐ŸŽฏ ๊ฒฐ๋ก : ๊ตฌ๊ฐ„ ํšŒ๋ฌธ ํŒ๋ณ„์€ ๋ฏธ๋ฆฌ ์ค€๋น„ํ•˜์ž

 

์ด ๋ฌธ์ œ๋Š” ๊ตฌ๊ฐ„์— ๋Œ€ํ•œ ๋ฐ˜๋ณต ์งˆ์˜๊ฐ€ ๋งŽ์€ ๊ฒฝ์šฐ,

์ •๋‹ต์„ ๋ฏธ๋ฆฌ ๊ณ„์‚ฐํ•ด๋†“๋Š” ์ „๋žต(DP + ๋ฉ”๋ชจ์ด์ œ์ด์…˜)์ด ๋งค์šฐ ๊ฐ•๋ ฅํ•˜๋‹ค๋Š” ๊ฒƒ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

 

 

 

 

'Algorithm & Data Structures > BOJ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

b1068. ํŠธ๋ฆฌ  (0) 2025.05.31
b9328. ์—ด์‡   (0) 2025.05.21
b1655. ๊ฐ€์šด๋ฐ๋ฅผ ๋งํ•ด์š”  (0) 2025.05.19
b1774. ์šฐ์ฃผ์‹ ๊ณผ์˜ ๊ต๊ฐ  (0) 2025.05.14
b4386. ๋ณ„์ž๋ฆฌ ๋งŒ๋“ค๊ธฐ  (0) 2025.05.13
'Algorithm & Data Structures/BOJ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • b1068. ํŠธ๋ฆฌ
  • b9328. ์—ด์‡ 
  • b1655. ๊ฐ€์šด๋ฐ๋ฅผ ๋งํ•ด์š”
  • b1774. ์šฐ์ฃผ์‹ ๊ณผ์˜ ๊ต๊ฐ
Geisha
Geisha
๊ฐœ๋ฐœ ์ผ๊ธฐ
  • Geisha
    Geisha
    Geisha
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (335)
      • Algorithm & Data Structures (253)
        • BOJ (111)
        • SWEA (1)
        • Programers (137)
        • Data Structures (3)
      • DB (29)
        • SQL (23)
        • RDBMS (2)
      • Java (1)
        • Class (1)
      • Spring (5)
        • Spring MVC (1)
        • Annotations (1)
      • CS (36)
        • ์šด์˜์ฒด์ œ (13)
        • ๋„คํŠธ์›Œํฌ (5)
      • Tool (6)
        • Git (5)
        • AWS (1)
      • Project (1)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

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

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

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    ํ›„์œ„์ˆœํšŒ
    PriorityQueue
    Stack
    programmers
    ๋ฐฑ์ค€
    binarySearch
    BFS
    ํˆฌํฌ์ธํ„ฐ
    ์ด๋ถ„ํƒ์ƒ‰
    DynamicProgramming
    dfs
    ์ž๋ฐ”
    ์œ ๋‹ˆ์˜จํŒŒ์ธ๋“œ
    Dijkstra
    ์•Œ๊ณ ๋ฆฌ์ฆ˜
    baekjoon
    ๊ตฌํ˜„
    ์ „์œ„์ˆœํšŒ
    dp
    Union-Find
    ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค
    Java
    algorithm
    ์Šคํƒ
    ๋ฐฑํŠธ๋ž˜ํ‚น
    ๋‹ค์ต์ŠคํŠธ๋ผ
    ๋™์ ๊ณ„ํš๋ฒ•
    ๊ฒฝ๋กœ์••์ถ•
    ๊ณจ๋“œ
    SQL
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.0
Geisha
b10942. ํŽ ๋ฆฐ๋“œ๋กฌ?
์ƒ๋‹จ์œผ๋กœ

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

๋‹จ์ถ•ํ‚ค

๋‚ด ๋ธ”๋กœ๊ทธ

๋‚ด ๋ธ”๋กœ๊ทธ - ๊ด€๋ฆฌ์ž ํ™ˆ ์ „ํ™˜
Q
Q
์ƒˆ ๊ธ€ ์“ฐ๊ธฐ
W
W

๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๊ธ€

๊ธ€ ์ˆ˜์ • (๊ถŒํ•œ ์žˆ๋Š” ๊ฒฝ์šฐ)
E
E
๋Œ“๊ธ€ ์˜์—ญ์œผ๋กœ ์ด๋™
C
C

๋ชจ๋“  ์˜์—ญ

์ด ํŽ˜์ด์ง€์˜ URL ๋ณต์‚ฌ
S
S
๋งจ ์œ„๋กœ ์ด๋™
T
T
ํ‹ฐ์Šคํ† ๋ฆฌ ํ™ˆ ์ด๋™
H
H
๋‹จ์ถ•ํ‚ค ์•ˆ๋‚ด
Shift + /
โ‡ง + /

* ๋‹จ์ถ•ํ‚ค๋Š” ํ•œ๊ธ€/์˜๋ฌธ ๋Œ€์†Œ๋ฌธ์ž๋กœ ์ด์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ํ‹ฐ์Šคํ† ๋ฆฌ ๊ธฐ๋ณธ ๋„๋ฉ”์ธ์—์„œ๋งŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.