algorithm

BOJ 10942

rkawk 2022. 10. 3. 19:22
๋”๋ณด๊ธฐ

ํŒฐ๋ฆฐ๋“œ๋กฌ? ์„ฑ๊ณต

 

 

0.5 ์ดˆ (ํ•˜๋‹จ ์ฐธ๊ณ ) 256 MB 40203 11389 7741 29.399%

๋ฌธ์ œ

๋ช…์šฐ๋Š” ํ™์ค€์ด์™€ ํ•จ๊ป˜ ํŒฐ๋ฆฐ๋“œ๋กฌ ๋†€์ด๋ฅผ ํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค.

๋จผ์ €, ํ™์ค€์ด๋Š” ์ž์—ฐ์ˆ˜ N๊ฐœ๋ฅผ ์น ํŒ์— ์ ๋Š”๋‹ค. ๊ทธ ๋‹ค์Œ, ๋ช…์šฐ์—๊ฒŒ ์งˆ๋ฌธ์„ ์ด M๋ฒˆ ํ•œ๋‹ค.

๊ฐ ์งˆ๋ฌธ์€ ๋‘ ์ •์ˆ˜ S์™€ E(1 ≤ S ≤ E ≤ N)๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์œผ๋ฉฐ, S๋ฒˆ์งธ ์ˆ˜๋ถ€ํ„ฐ E๋ฒˆ์งธ ๊นŒ์ง€ ์ˆ˜๊ฐ€ ํŒฐ๋ฆฐ๋“œ๋กฌ์„ ์ด๋ฃจ๋Š”์ง€๋ฅผ ๋ฌผ์–ด๋ณด๋ฉฐ, ๋ช…์šฐ๋Š” ๊ฐ ์งˆ๋ฌธ์— ๋Œ€ํ•ด ํŒฐ๋ฆฐ๋“œ๋กฌ์ด๋‹ค ๋˜๋Š” ์•„๋‹ˆ๋‹ค๋ฅผ ๋งํ•ด์•ผ ํ•œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ํ™์ค€์ด๊ฐ€ ์น ํŒ์— ์ ์€ ์ˆ˜๊ฐ€ 1, 2, 1, 3, 1, 2, 1๋ผ๊ณ  ํ•˜์ž.

  • S = 1, E = 3์ธ ๊ฒฝ์šฐ 1, 2, 1์€ ํŒฐ๋ฆฐ๋“œ๋กฌ์ด๋‹ค.
  • S = 2, E = 5์ธ ๊ฒฝ์šฐ 2, 1, 3, 1์€ ํŒฐ๋ฆฐ๋“œ๋กฌ์ด ์•„๋‹ˆ๋‹ค.
  • S = 3, E = 3์ธ ๊ฒฝ์šฐ 1์€ ํŒฐ๋ฆฐ๋“œ๋กฌ์ด๋‹ค.
  • S = 5, E = 7์ธ ๊ฒฝ์šฐ 1, 2, 1์€ ํŒฐ๋ฆฐ๋“œ๋กฌ์ด๋‹ค.

์ž์—ฐ์ˆ˜ N๊ฐœ์™€ ์งˆ๋ฌธ M๊ฐœ๊ฐ€ ๋ชจ๋‘ ์ฃผ์–ด์กŒ์„ ๋•Œ, ๋ช…์šฐ์˜ ๋Œ€๋‹ต์„ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ์ˆ˜์—ด์˜ ํฌ๊ธฐ N (1 ≤ N ≤ 2,000)์ด ์ฃผ์–ด์ง„๋‹ค.

๋‘˜์งธ ์ค„์—๋Š” ํ™์ค€์ด๊ฐ€ ์น ํŒ์— ์ ์€ ์ˆ˜ N๊ฐœ๊ฐ€ ์ˆœ์„œ๋Œ€๋กœ ์ฃผ์–ด์ง„๋‹ค. ์น ํŒ์— ์ ์€ ์ˆ˜๋Š” 100,000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜์ด๋‹ค.

์…‹์งธ ์ค„์—๋Š” ํ™์ค€์ด๊ฐ€ ํ•œ ์งˆ๋ฌธ์˜ ๊ฐœ์ˆ˜ M (1 ≤ M ≤ 1,000,000)์ด ์ฃผ์–ด์ง„๋‹ค.

๋„ท์งธ ์ค„๋ถ€ํ„ฐ M๊ฐœ์˜ ์ค„์—๋Š” ํ™์ค€์ด๊ฐ€ ๋ช…์šฐ์—๊ฒŒ ํ•œ ์งˆ๋ฌธ S์™€ E๊ฐ€ ํ•œ ์ค„์— ํ•˜๋‚˜์”ฉ ์ฃผ์–ด์ง„๋‹ค.

์ถœ๋ ฅ

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

์˜ˆ์ œ ์ž…๋ ฅ 1 ๋ณต์‚ฌ

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

์˜ˆ์ œ ์ถœ๋ ฅ 1 ๋ณต์‚ฌ

1
0
1
1โ€‹

ํŽ ๋ฆฐ๋“œ๋กฌ์˜ ๊ทœ์น™์„ ์ฐพ์•„๋‚ด์•ผ ํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค.

 

S๋ฒˆ์งธ ์ˆ˜ ๋ถ€ํ„ฐ E๋ฒˆ์งธ ์ˆ˜๊ฐ€ ํŽ ๋ฆฐ๋“œ๋กฌ์ธ์ง€ ๋‚˜ํƒ€๋‚ด๋Š” ๋ณ€์ˆ˜๋ฅผ arr[S][E]๋ผ ํ•˜๊ณ , ์ž…๋ ฅ๋ฐ›์€ ์ˆ˜์—ด์„ numarr[]๋ผ ํ•˜๋ฉด

S = E, S+1 = E and numarr[S+1] = numarr[E], numarr[S] = numarr[E] and arr[S+1][E-1] = true

์œ„์— ์„œ์ˆ ํ•œ ์„ธ๊ฐ€์ง€ ๊ฒฝ์šฐ์—๋งŒ ํŽ ๋ฆฐ๋“œ๋กฌ์ด ๋œ๋‹ค.

 

๊ทธ๋Ÿฌ๋ฏ€๋กœ ์œ„์˜ ๊ฒฝ์šฐ์— ๋”ฐ๋ผ ์ค‘๋ณต๋œ ์—ฐ์‚ฐ์ด ์ƒ๊ธฐ๋ฏ€๋กœ, DP๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์งœ๋ฉด ๋œ๋‹ค.

 

 

#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
int N,M,S,E,arr[2001],dp[2001][2001];
void func(int i, int j){
    if(i == j){
        dp[i][j] = 2;
        return;
    }
    if(i+1 == j){
        if(arr[i] == arr[j])
            dp[i][j] = 2;
        else
            dp[i][j] = 1;
        return;
    }
    if(dp[i+1][j-1] == 0){
        func(i+1, j-1);
    }
    if(dp[i+1][j-1] == 1){
        dp[i][j] = 1;
        return;
    }else if(dp[i+1][j-1] == 2 && arr[i] == arr[j]){
        dp[i][j] = 2;
        return;
    }else if(dp[i+1][j-1] == 2 && arr[i] != arr[j]){
        dp[i][j] = 1;
        return;
    }
}
int main(){
    ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    cin>>N;
    for(int i=1; i<=N; i++)
        cin>>arr[i];
    cin>>M;
    for(int i=0; i<M; i++){
        cin>>S>>E;
        func(S, E);
        cout<<dp[S][E]-1<<'\n';
    }
    // for(int i=1; i<=N; i++){
    //     for(int j=1; j<=N; j++)
    //         cout<<dp[i][j]<<' ';
    //     cout<<endl;
    // }

}

'algorithm' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

BOJ 24524  (1) 2022.10.05
BOJ 21610  (1) 2022.10.04
BOJ 11758(CCW)  (1) 2022.10.03
BOJ 14500  (0) 2022.10.01
BOJ 1629  (0) 2022.10.01