2023. 5. 2. 17:33, 알고리즘/BOJ
#include <bits/stdc++.h>
using namespace std;
int a[1005];
int d[1005][35];
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
int t, w;
cin >> t >> w;
for (int i = 1; i <= t; i++)
cin >> a[i];
//자두가 안움직이고 시간이 지날때의 d[i] 값들을 초기화
int cnt = 0;
for (int i = 1; i <= t; i++) {
if (a[i] == 1) cnt++;
d[i][0] = cnt;
}
for (int i = 1; i <= t; i++)
for (int j = 1; j <= w; j++)
d[i][j] = max(d[i - 1][j - 1], d[i - 1][j]) + (j % 2 + 1 == a[i]);
cout << *max_element(d[t], d[t]+ w + 1);
}
위의 코드는 2240번: 자두나무 문제의 c++ 풀이인데,
이때 맨 마지막에 cout<<*max_element(d[t],d[t]+w+1); 라고 작성해야 하는것을
(d,d+w+1) 로 작성하여서 잘못된 값을 받게되었다.
이때 이차원 배열을 통해서도 max_element( ); 를 활용할 수 있으며, 1차원 배열 내의 특정 원소를 선택해서 그 원소의 속에있는 배열에 대해서 max_element를 확인할때는 이렇게 (d[t=>특정원소의 인덱스],d[t]+w+1); 형태로 활용해주어야 하고 이렇게 2차원 배열에도 잘 활용할 수 있다는걸 기억하도록 하자.
그리고 자두나무 문제의 경우 굉장히 많은 시간이 들었지만 이제는 제법 어느정도 이해한것 같아서 붙잡고 있었던게 도움이 많이 되었던것 같다. 공부가 많이 되었다.
'알고리즘 > BOJ' 카테고리의 다른 글
stack과 같은 기능을 활용해야 하는데, 그 와중에 개별 원소에 접근해야 할때. 그럴땐 deque를 사용하자. (0) | 2023.05.03 |
---|---|
dp 문제에서 pre[] 배열을 선언해서 뒤로 추적해 나갈때 deque의 활용 (0) | 2023.05.02 |
파이썬 코드를 볼때 알게된 c++과 파이썬의 복사의 깊이 차이. (0) | 2023.05.01 |
long long 타입으로 선언한 변수에 값을 할당할때 LL을 붙이도록 하자. (0) | 2023.04.30 |
c++ max()와 *max_element() 에 대해서 (0) | 2023.04.30 |
Comments, Trackbacks