알고리즘/백준 문제풀이

[boj] 백준 2209 조짜기 python 풀이

감자156 2023. 5. 11. 01:30
반응형

새로운 사람이 추가되면 생길 수 있는 새로운 팀을 모든 경우의 수를 따져가며 dp에 max(총점수)를 기록

 

예를 들어,

 

10
2 5 7 1 3 4 8 6 9 3

 

위 테스트 케이스의 경우에는

2, 5 다음 7이 새로 들어왔을 때, 생길 수 있는 새로운 팀은

2, 5 // 7 

2 // 5, 7

2,5,7 (한 팀)

.

.

이런식

 

그런데 이전 dp에 빨간 글씨 경우는 모두 저장되어 있으므로

새롭게 생길 수 있는 팀의 점수에 가져다 더하면 됨.

모든 경우의 수를 보면서 제일 큰 점수를 가지는 경우를 dp에 저장.

 

 

문제)

https://www.acmicpc.net/problem/2229

 

2229번: 조 짜기

알고스팟 캠프에 N(1 ≤ N ≤ 1,000)명의 학생들이 참여하였다. 학생들은 열심히 공부를 하고 있었는데, 어느 날 조별 수업을 진행하기로 하였다. 조별 수업의 목적은 잘 하는 학생들과 덜 잘 하는

www.acmicpc.net

 

코드)

import sys
input = sys.stdin.readline

N = int(input().strip())
student_list = list(map(int, input().split()))
dp = [0 for _ in range(N+1)]

for i in range(N+1):
    for k in range(i-1, -1, -1): 
        new_team_score = max(student_list[k:i]) - min(student_list[k:i]) # 새로운 사람이 포함되어 구성될 수 있는 팀의 점수
        dp[i] = max(dp[k] + new_team_score, dp[i])
        
print(dp[-1])
반응형