본문 바로가기
알고리즘/BOJ

[Python] 백준 10942: 팰린드롬?

by PIAI 2021. 10. 3.

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

 

10942번: 팰린드롬?

총 M개의 줄에 걸쳐 홍준이의 질문에 대한 명우의 답을 입력으로 주어진 순서에 따라서 출력한다. 팰린드롬인 경우에는 1, 아닌 경우에는 0을 출력한다.

www.acmicpc.net

1. m <= 1000000 로 들어오므로 입력을 sys.stdin.readline 으로 받아야 한다.

2. 시작과 끝이 같을 때 무조건 가능하고, 시작과 끝의 자릿수가 1자리 차이날때는 수가 같아야한다.

3. 시작과끝의 갭이 3이상일때부터는 바로 전의 자리가 팰린드롬 이여야 하고 현재 시작과 끝의 수가 같아야한다. 

예를들면 1 2 4 2 1 이라는 수가 있다고 가정하면 1 2 4 2 1  2 4 2가 팰린드롬이여야하고 1과 1이 같아야 성립한다.

import sys

n = int(input())
a = [0] + list(map(int, sys.stdin.readline().split()))
m = int(input())
dy = [[0 for _ in range(n+1)] for _ in range(n+1)]

for i in range(1, n+1):
    dy[i][i] = 1

for i in range(1, n):
    dy[i][i+1] = 1 if a[i+1] == a[i] else 0

for j in range(2, n):
    for i in range(n-j+1):
        k = j+i
        if dy[i+1][k-1] and a[i] == a[k]:
            dy[i][k] = 1
        else:
            dy[i][k] = 0

for _ in range(m):
    s, e = map(int, sys.stdin.readline().split())
    print(dy[s][e])

'알고리즘 > BOJ' 카테고리의 다른 글

[Python] 백준 2631: 줄세우기  (0) 2021.10.04
[Python] 백준 5554: 1학년  (0) 2021.10.03
[Python] 백준 11049: 행렬 곱셈 순서  (0) 2021.10.02
[Python] 백준 17070: 파이프 옮기기 1  (0) 2021.10.02
[Python] 백준 1132: 합  (0) 2021.09.29

댓글