[알고리즘] 문제풀이 연습

[알골90제] 49번 - 쌓기 블록의 최대값 (2차원 배열 응용)

ddgoori 2019. 7. 28. 22:46

*문제

 

 

 

 

 

최대 개수 2031로 먼저 채워준다.

1 1 2 3 측면 블럭 개수 입력 받을때 반대로 받는다.

=> 3 2 1 1 로

 

측면에서 봤을 때, 해당되는 숫자보다 큰숫자를 해당 숫자로 바꿔 준다.

=> 2중 포문 돌면서 각각 칸의 개수를 세면, 블록의 최대 개수가 나옴

 

 

*풀이

 

//49번 - 쌓기 블록의 최대값 (2차원 배열 응용)

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <algorithm>
int a[11][11], len[11];

int main() {

	int n, sum = 0;

	scanf("%d", &n);

	for (int i = 1; i <= n; i++)
		scanf("%d", &len[i]);

	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= n; j++) {
			a[j][i] = len[i];
		}
	}

	//for문 사용시 n부터 시작하면 i>=1로하는 걸 i<=1로 잘못 쓰는 실수함
	for (int i = n; i >= 1; i--)
		scanf("%d", &len[i]);

	for (int i = 1; i <= n;i++) {
		for (int j = 1; j <= n; j++) {
			if (a[i][j] > len[i]) a[i][j] = len[i];
		}
	}

	for (int i = 1; i <= n;i++) {
		for (int j = 1; j <= n; j++) {
			sum += a[i][j];
		}
	}

	printf("%d", sum);
	return 0;

}

 

 

*중요

for(i
	for(j
    	a[j][i]