작은 지식주머니
백준 파이썬 9465 스티커 본문
https://www.acmicpc.net/problem/9465
9465번: 스티커
첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스의 첫째 줄에는 n (1 ≤ n ≤ 100,000)이 주어진다. 다음 두 줄에는 n개의 정수가 주어지며, 각 정수는 그 위치에 해당하는 스티커의
www.acmicpc.net

DP문제이다.
import sys
t = int(input())
for i in range(t):
n = int(input())
s = []
for j in range(2):
s.append(list(map(int,sys.stdin.readline().split())))
if len(s[0]) <= 1:
print(max(s[0][0],s[1][0]))
continue
s[0][1] += s[1][0]
s[1][1] += s[0][0]
for k in range(2,n):
s[0][k] += max(s[1][k-1],s[1][k-2])
s[1][k] += max(s[0][k-1],s[0][k-2])
print(max(s[0][n-1],s[1][n-1]))
N을 입력해 배열의 길이를 조절 한 후
배열 S에 집어넣는다.
만약 N이 1이하라면 뒤에 나올 식에 문제가 생겨 IndexError가 발생하기 때문에
if문을 사용해 벗어날수 있게한다.

s에 각각 왼쪽위와 아래쪽 밑을 더하게 한 후
for in문을돌려서 s[0][k]일 경우 s[1][k-1]과.s[1][k-2]중 가장 큰수를 더하게 한다.
s[1][k]도 마찬가지
그다음 s[0][n-1]과 s[1][n-1]의 최댓값을 출력하게 하면 정답이나옴.
'백준 python 기록' 카테고리의 다른 글
백준 파이썬 2407 조합 (0) | 2021.09.19 |
---|---|
파이썬 백준 1965 상자넣기 (0) | 2021.09.19 |
백준 파이썬 6603 로또 (0) | 2021.09.17 |
백준 4948 베르트랑 공준 (0) | 2021.09.16 |
백준 파이썬 1931 회의실 배정 (0) | 2021.09.15 |