Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- SessionAttribute
- 네이버 인턴
- Django
- PyAmdecoder
- 3단계 지역 DB
- DBMS
- frontend
- 행정지역 DB
- EER
- 메모리 포랜식
- reversing.kr
- 방명록 만들기
- webhacking 처음
- Layered Architecture
- restapi
- spring
- ㅁㅇㅂ??ㅇㅈㄷ ㅎㅇㅌ...
- mysql
- 동읍면 DB
- react
- 소프트웨어 개발보안 경진대회
- 인턴 후기
- 인턴 지원
- 정보보호병 후기
- JSTL
- Database
- Forensic 절차
- 소개딩
- jsp
- riceteacatpanda
Archives
- Today
- Total
웹찢남
[백준 10942 펠린드롬? 문제] PYTHON 본문
펠린드롬 문제 자체는 어렵지 않아 처음에는 아래 코드와 같이 간단하게 구현을 해봤다.
N = int(input())
Narray = list(map(int, input().split()))
M = int(input())
for _ in range(M):
S, E = map(int, input().split())
if Narray[S:E+1] == Narray[S:E+1][::-1]:
print(1)
else:
print(0)
하지만 역시 골드 문제답게 호락호락하지 않아 시간초과로 False가 나왔다.
결국 여러 방법을 찾아보고 NxN 2차원 배열에 1,0으로 T/F로 저장을 해서 푸는 법을 알았다.
처음에 이런 방식을 생각하기는 했지만 이런 방식으로 풀면 N도 크고 M도 커서 시간 초과가 걸릴까 포기한 방법이다.
하지만 이 방법을 보고 N^2이라해도 400만 밖에 안돼 충분했다.
처음에 한 방법이 M의 크기가 커질수록 연산의 횟수가 늘어나지만 N은 최대 2000인 것에 비해 M은 최대 백만이어서 결국은 부적절한 방법이었다 생각한다.
import sys
input = sys.stdin.readline
N = int(input())
Narray = list(map(int, input().split()))
dp = [[0]*(N+1) for _ in range(N+1)]
for i in range(0, N+1):
for start in range(1, N+1):
end = start+i
if end > N:
break
if i == 0:
dp[start][end] = 1
continue
if i == 1 and Narray[start-1] == Narray[end-1]:
dp[start][end] = 1
continue
if dp[start+1][end-1] and Narray[start-1] == Narray[end-1]:
dp[start][end] = 1
M = int(input())
for _ in range(M):
S, E = map(int, input().split())
print(dp[S][E])
'백준 Algorithm' 카테고리의 다른 글
[백준 1309 동물원 문제] PYTHON (0) | 2021.09.07 |
---|---|
[백준 5557 1학년 문제] PYTHON (0) | 2021.08.25 |
[백준 1915 가장 큰 정사각형 문제] PYTHON (0) | 2021.08.23 |
[백준 1916 최소비용 구하기 문제] PYTHON (0) | 2021.08.20 |
[백준 2252 줄 세우기 문제] PYTHON (0) | 2021.08.18 |
Comments