-
백준 1912 (연속합)백준 문제 2024. 2. 8. 20:26728x90
N개의 수열이 주어지면, 연속합이 가장 큰 최댓값을 구하는 문제이다.
예를 들어서 10, -4, 3, 1, 5, 6, -35, 12, 21, -1 이라는 수열이 주어졌다고 하자. 여기서 정답은 12+21인 33이 정답이 된다.
dp를 사용할 것이다.
dp[i] = i번째 인덱스까지 탐색한 최댓값이다.
따라서 처음 base case는 dp[0] = arr[0]이다.
public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); int n = Integer.parseInt(st.nextToken()); int []arr = new int[n]; int []dp = new int[n]; st = new StringTokenizer(br.readLine()); for(int i=0;i<n;i++)arr[i] = Integer.parseInt(st.nextToken()); dp[0] = arr[0]; //base case int ans=arr[0]; //base case for(int i=1;i<n;i++){ dp[i] = Math.max(dp[i-1]+arr[i], arr[i]); ans = Math.max(dp[i], ans); } System.out.println(ans); } }
for문으로 dp를 모두 계산한 후 정렬을 해서 최댓값을 얻을 수 있겠지만, 여기에서는 ans 변수를 두었다.
ans변수는 최댓값을 중간에서 알기위한 변수이다.
'백준 문제' 카테고리의 다른 글
백준 10844 (쉬운 계단 수) (0) 2024.02.10 백준 1890 (점프) (0) 2024.02.10 백준 12869 (뮤탈리스크) (0) 2024.02.06 백준 1339 (단어 수학) (1) 2024.02.05 백준 11000 (강의실 배정) (0) 2024.02.02