c++ 2차원 배열에서 *max_element를 사용하는 방법
#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차원 배열에도 잘 활용할 수 있다는걸 기억하도록 하자. 

 

그리고 자두나무 문제의 경우 굉장히 많은 시간이 들었지만 이제는 제법 어느정도 이해한것 같아서 붙잡고 있었던게 도움이 많이 되었던것 같다. 공부가 많이 되었다. 

 

  Comments,     Trackbacks