Notice
Recent Posts
Recent Comments
Link
«   2025/07   »
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
Tags more
Archives
Today
Total
관리 메뉴

작은 지식주머니

백준 파이썬 9465 스티커 본문

백준 python 기록

백준 파이썬 9465 스티커

작지 2021. 9. 18. 21:08

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
Comments