반응형
    
    
    
  문제 출처 :
https://www.acmicpc.net/problem/10942
알고리즘 분석 :
팰린드롬이란? 1 2 2 1처럼 앞의 수와 뒤의 수가 같은것을 의미한다.
즉, 반으로 나누어서 거울처럼 겹쳐지는지 확인하여 겹쳐지면 팰린드롬이다.
1 3 1은 팰린드롬이지만 1 2 3 은 팰린드롬이 아니다. (1,3이 같은 수가 아니므로)
다이나믹 프로그래밍으로 풀라는 힌트가 존재하지만, 어떤 이유에서 그렇게 풀어야 되는지는 잘 모르겠다.
하지만 DP가 아니고도 단일 for문으로 해결 할 수 있기에 알고리즘의 시간 복잡도 및 공간 복잡도 면에서는 부담이 덜 되는 알고리즘이다.
소스 코드 :
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | #include <stdio.h> int main() {     int n,m, arr[2001];     int start, end;     int tstart, tend;     scanf("%d", &n);     for (int i = 0; i < n; i++)         scanf("%d", &arr[i]);     // m == tCase     scanf("%d", &m);     for (int i = 0; i < m; i++)     {         scanf("%d %d", &start, &end);         // start를 1로 지정하면 배열의 처음(0)을 의미하니 tstart, tend에 각각 -1씩 해준다.         tstart = start - 1;         tend = end - 1;         // for문의 순회는 start + end의 절반만 돌면된다. ex) 1 2 3 4면 1 2까지만 돌면 된다.         for (int j = start; j <= (start + end) / 2; j++)         {             // 앞과 뒤의 수가 일치하면             if (arr[tstart] == arr[tend])             {                  // 순회의 끝이라면                 if (j == (start + end) / 2)                 {                     printf("1\n"); break;                 }                 tstart++; // tstart는 증가, tend는 감소(다음 수 계속 확인)                 tend--;             }             // 하나라도 틀리면 팰린드롬이 아니다.             else             {                 printf("0\n");                 break;             }         }     } } //                                                        This source code Copyright is Crocus  //                                             Do you want to see more contents? click here >> | Crocus | 
반응형
    
    
    
  'Applied > 알고리즘 문제풀이' 카테고리의 다른 글
| [1789번] 수들의 합 (0) | 2016.07.09 | 
|---|---|
| [10829번] 이진수 변환 (0) | 2016.07.09 | 
| [11047번] 동전 0 (Greedy Algorithm) (0) | 2016.07.05 | 
| [11399번] ATM (Greedy Algorithm) (0) | 2016.07.05 | 
| [11048번] 이동 하기 (Recursive, Dynamic Programming) (0) | 2016.07.05 |