< '오블완' 태그의 글 목록

오블완 3

[C++ / 백준 1912번] 연속합

DP를 이용하여 풀이했다. 범위가 100,000 이고 시간 제한이 1초이므로 이중 for문을 사용할 수 없다.따라서 카데인 알고리즘을 활용해 풀이했다.배열 하나씩 더해가면서 DP 배열을 구하되  ans 변수를 이용해 최대 값이 나온 dp 배열 인덱스의 값을 동시에 찾도록 했다.그리고 0번째 인덱스 값 혼자가 최대값일 때를 대비해 for문에 들어가지 않는 0번 인덱스를 ans 와 다시 한번 비교해 주었다. 주의할 점은 dp 배열은 (해당 인덱스 - 1 ) + a[해당 인덱스] 값과 a[해당 인덱스] 값 중 누가 큰지를 저장하는 역할이고(0부터 해당 인덱스까지의 원소를 합했을 때의 최대 값) , 실제 답은 ans 에 저장된다는 것이다.  #include #include #include using namesp..

[C++ / 백준 11053번] 가장 긴 증가하는 부분 수열

시간 제한이 1초이고, 수열의 크기가 1000이므로 1000 * 1000을 하였을 때 1억 번을 넘지 않아 이중 반복문으로 풀이 할 것을 예상했다. DP 문제들이 대부분 배열과 점화식을 사용해 해결하다보니 자연스럽게 C 배열로 선언해서 풀었었는데, 다른 풀이를 검색해서 보니 벡터를 사용하는 것이 훨씬 깔끔해 바꾸었다. 핵심은 이중 반복문으로 경우의 수를 전부 순회하며 가장 긴 수열을 만드는 DP 배열 값을 찾는 것이다. 우선 현재 인덱스 i 가 이전 인덱스들의 수보다 당연히 커야 하며, 이전 인덱스의 수보다 i 인덱스 수가 크다면 그때 dp 배열을 검사해  max ( i번째 값, dp[j] + i번째 값) 을 실행해 갱신해 주면 된다. #include #include #include using names..