[Python] 백준 #1912- 연속합
문제 1912번: 연속합 첫째 줄에 정수 n(1 ≤ n ≤ 100,000)이 주어지고 둘째 줄에는 n개의 정수로 이루어진 수열이 주어진다. 수는 -1,000보다 크거나 같고, 1,000보다 작거나 같은 정수이다. www.acmicpc.net
changsroad.tistory.com
재풀이하여 올렸습니다.~
문제
1912번: 연속합
첫째 줄에 정수 n(1 ≤ n ≤ 100,000)이 주어지고 둘째 줄에는 n개의 정수로 이루어진 수열이 주어진다. 수는 -1,000보다 크거나 같고, 1,000보다 작거나 같은 정수이다.
www.acmicpc.net
코드
My answer(시간초과)
import sys
input=sys.stdin.readline
n=int(input())
num=list(map(int,input().split()))
answer=[]
for i in range(n):
dp=[]
dp=list(sum(num[j:j+i+1]) for j in range(len(num)-i))
answer.append(max(dp))
#print(answer)
print(max(answer))
Another answer
import sys
input=sys.stdin.readline
n=int(input())
num=list(map(int,input().split()))
answer=[]
a=0
for i in range(n):
if(num[i]>0):
a+=num[i]
answer.append(a)
else:
a+=num[i]
if(a<0):
answer.append(num[i])
a=0
else:
answer.append(a)
print(max(answer))
input()
a=m=-1e9
for x in input().split():
a=max(0,a)+int(x)
m=max(m,a)
print(m)
N = int(input())
A = list(map(int,input().split()))
for i in range(1,N):
A[i] = max(A[i], A[i-1]+A[i])
print(max(A))
풀이
내코드는 또 dp를 쓰지 않아서 시간초과가 났다... 우선 첫번째 another answer 첫번째 코드는 dp는 아닌데 그냥 규칙을 찾아서 끼워맞췄다. 다음 으로 두번째와 3번째 코드는 비슷해보이는데 어떻게 저렇게 생각하지...제일 마지막 코드가 정석적인 dp로 푼 것같은데 너무 어려워보인다..
728x90
'코딩테스트 > 백준[Python]' 카테고리의 다른 글
| [Python] 백준 #18511- 큰 수 구성하기[try_again] (0) | 2022.01.14 |
|---|---|
| [Python] 백준 #5568- 카드 놓기 (0) | 2022.01.14 |
| [Python] 백준 #2407- 조합 (0) | 2022.01.11 |
| [Python] 백준 #1806- 부분합[try_again] (0) | 2022.01.11 |
| [Python] 백준 #15489- 파스칼 삼각형 (0) | 2022.01.07 |