강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

강기봉님의 프로필 이미지
강기봉

작성한 질문수

it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비

49. 쌓기 블록의 최댓값 (2차원 배열 응용)

다른 풀이 방식

작성

·

306

0

측면과 정면을 입력받아 따로 front, right 배열에 할당하였습니다.

2차원 배열의 정면을 시작으로(n)해서 맨 뒤쪽까지 할당받는 식으로 접근하여 측면의 값과 정면의 값을 서로 비교하면서 값을 할당하였습니다.

#include <stdio.h>
#include <vector>
#include <algorithm>

using namespace std;

int main() {
	int n, i, j, pos = 0, sum = 0;
	scanf("%d", &n);
	vector<vector<int> >a(n + 1, vector<int> (n + 1, 0));
	int front[n + 1] = {};
	int right[n + 1] = {};

// front 입력 
	for(i = 1; i <= n; i++) {
		scanf("%d", &front[i]);
	}
//	right 입력 
	for(i = 1; i <= n; i++) {
		scanf("%d", &right[i]);
	}
	
//	값 할당 
	for(i = n; i >= 1; i--) {
		pos++;
		for(j = 1; j <= n; j++) {
			if(right[pos] <= front[j]) {
				a[i][j] = right[pos];
			} else if(front[j] == 0) {
				a[i][j] = 0;
			} else {
				a[i][j] = front[j];
			}
		}
	}

// 합 계산 
	for(i = 1; i <= n; i++) {
		for(j = 1; j <= n; j++) {
			sum += a[i][j];
		}
	}
	printf("%d", sum);
	return 0;
}

답변 1

0

김태원님의 프로필 이미지
김태원
지식공유자

안녕하세요^^

굉장히 나이스한 코드네요. 좋은 코드 감사합니다!!

강기봉님의 프로필 이미지
강기봉

작성한 질문수

질문하기