it 취업을 위한 알고리즘 문제풀이 입문 : 49. 블록의 최댓값
🙇♀️블록의 최댓값
현수는 블록놀이를 좋아합니다.
현수에게 정면에서 본 단면과 오른쪽 측면에서 본 단면을 주고 최대 블록개수를 사용하여 정면과 오른쪽 측면에서 본 모습으로 블록을 쌓으라 했습니다.
현수가 블록을 쌓는데 사용해야 할 최대 개수를 출력하는 프로그램을 작성하세요.
위에서 봤을 때 각 칸의 블록의 개수입니다.
정면에서의 높이 정보와 오른쪽 측면에서의 높이 정보가 주어지면 사용할 수 있는 블록의 쵀대 개수를 출력하세요.
▣ 입력설명
첫 줄에 블록의 크기 N(3<=N<=10)이 주어집니다.
블록이 크기는 정사각형 N*N입니다.
두 번째 줄에 N개의 정면에서의 높이 정보가 왼쪽 정보부터 주어집니다.
세 번째 줄에 N개의 오른쪽 측면 높이 정보가 앞쪽부터 주어집니다.
블록의 높이는 10 미만입니다.
▣ 출력설명
첫 줄에 블록의 최대 개수를 출력합니다.
▣ 입력예제 1
4
2 0 3 1
1 1 2 3
▣ 출력예제 1
17
🚀풀이
정면과 오른쪽 측면의 정보를 받을 배열 두 개를 만든다.
이 배열을 각 행마다 비교를 하는데 이 때 더 작은 것이 결과값에 합해져야한다.
큰값이 들어온다면 정사영의 모습이 달리지기 때문이다.
물론 값이 같은 경우는 그냥 합하면 된다.
int n;
vector<int> seq1;
vector<int> seq2;
void setting()
{
cin >> n;
int temp;
for (int i = 0; i < n; ++i)
{
cin >> temp;
seq1.push_back(temp);
}
for (int i = 0; i < n; ++i)
{
cin >> temp;
seq2.push_back(temp);
}
}
void solve()
{
int res = 0;
for (int i = 0; i < n; ++i)
{
for (int j = 0; j < n; ++j)
{
if (seq1[i] > seq2[j])
{
res += seq2[j];
}
else
{
res += seq1[i];
}
}
}
cout << res;
}
🚀전체 코드
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include<iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
int n;
vector<int> seq1;
vector<int> seq2;
void setting()
{
cin >> n;
int temp;
for (int i = 0; i < n; ++i)
{
cin >> temp;
seq1.push_back(temp);
}
for (int i = 0; i < n; ++i)
{
cin >> temp;
seq2.push_back(temp);
}
}
void solve()
{
int res = 0;
for (int i = 0; i < n; ++i)
{
for (int j = 0; j < n; ++j)
{
if (seq1[i] > seq2[j])
{
res += seq2[j];
}
else
{
res += seq1[i];
}
}
}
cout << res;
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
//freopen("input.txt", "rt", stdin);
setting();
solve();
return 0;
}