728x90
반응형
https://www.acmicpc.net/problem/9465
9465번: 스티커
첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스의 첫째 줄에는 n (1 ≤ n ≤ 100,000)이 주어진다. 다음 두 줄에는 n개의 정수가 주어지며, 각 정수는 그 위치에 해당하는 스티커의
www.acmicpc.net
정답 code
#스티커
import sys
input = sys.stdin.readline
t = int(input())
for _ in range(t):
case = []
n = int(input())
for i in range(2):
case.append(list(map(int,input().split())))
for j in range(1,n):
if j == 1:
case[0][j] += case[1][j-1]
case[1][j] += case[0][j-1]
else:
case[0][j] += max(case[1][j-1], case[1][j-2])
case[1][j] += max(case[0][j-1], case[0][j-2])
print(max(case[0][n-1],case[1][n-1]))
solution
이 문제의 최대값을 구해가는 과정에 두가지를 생각해야 한다.
50 | 10 | 100 | 20 | 40 |
30 | 50 | 70 | 10 | 60 |
문제 예시와 같이 점수가 있다고 가정해보자
이 예시의 최대 값을 구해나가는 과정은 아래와 같다.
50 | 10 + (30) = 40 | 100 + MAX(100,30) | ||
30 | 50 + (50) = 100 | 70 + MAX(40,50) |
index[1][2]값을 보면 원래 저장되있는 값70 에 바로전 대각선에 저장된 값 40이 아닌 그 왼쪽의 50을 더하는게 더 커지는 경우가 있다.
이런경우를 위해 index[][2]이후로는 바로 직전 대각선 뿐만 아니라 그 왼쪽에 위치한 값중에서 큰값을 더해주어야 최대값을 구할 수 있다.
case[0][j] += max(case[1][j-1], case[1][j-2])
case[1][j] += max(case[0][j-1], case[0][j-2])
이렇게 끝까지 더해가며 최대값을 구한뒤 index[0]과 [1]의 끝부분중 max값을 출력해주면된다.
728x90
반응형
'알고리즘 > 백준[baekjoon]' 카테고리의 다른 글
[백준 baekjoon] 백준 21608번 상어 초등학교 by 파이썬(Python) : 구현 (0) | 2023.07.24 |
---|---|
[쉽게 배우는 운영체제] 제 3장 프로세스와 스레드 연습문제 풀이 정답 (심화문제) (0) | 2022.10.14 |
[baekjoon] 백준 5639번 : 이진 검색 트리 (by python 파이썬) 재귀 (0) | 2022.09.12 |
[baekjoon] 백준 2638번 : 치즈 (by python 파이썬) bfs (0) | 2022.09.07 |
[baekjoon] 백준 2407번 : 조합 (by python 파이썬) 수학 조합 (0) | 2022.09.05 |