📄문제
현수는 블록놀이를 좋아합니다. 현수에게 정면에서 본 단면과 오른쪽 측면에서 본 단면을 주고 최대 블록개수를 사용하여 정면과 오른쪽 측면에서 본 모습으로 블록을 쌓으라 했습니다.
현수가 블록을 쌓는데 사용해야 할 최대 개수를 출력하는 프로그램을 작성하세요.
위에서 봤을 때 각 칸의 블록의 개수입니다.
정면에서의 높이 정보와 오른쪽 측면에서의 높이 정보가 주어지면 사용할 수 있는 블록의 쵀대 개수를 출력하세요.
⬇️ 입력
첫 줄에 블록의 크기 N(3<=N<=10)이 주어집니다. 블록이 크기는 정사각형 N*N입니다.
두 번째 줄에 N개의 정면에서의 높이 정보가 왼쪽 정보부터 주어집니다.
세 번째 줄에 N개의 오른쪽 측면 높이 정보가 앞쪽부터 주어집니다.
블록의 높이는 10 미만입니다.
4 2 0 3 1 1 1 2 3 |
⬆️ 출력
첫 줄에 블록의 최대 개수를 출력합니다.
17 |
📝 풀이
#include <iostream>
int getMin(int a, int b)
{
return a > b ? b : a;
}
int main()
{
int N, sum = 0;
scanf_s("%d", &N);
int* fView = new int[N];
int* sView = new int[N];
for (int i = 0; i < N; ++i)
scanf_s("%d", &fView[i]);
for (int i = 0; i < N; ++i)
scanf_s("%d", &sView[i]);
for (int i = N - 1; i >= 0; --i)
for (int j = 0; j < N; ++j)
{
// 두는 블록은 정면과 측면뷰에서 둘 중 작은 값으로 설정
int min = getMin(fView[i], sView[j]);
sum += min;
}
printf("%d", sum);
}
- fView, sView의 배열에 각각 값을 넣은 후 2중 for문을 이용하여 바라보는 방향에 맞는 블록의 최소값으로 둡니다.
'algorithms (C++)' 카테고리의 다른 글
[C++] Ugly Numbers 🔥 (1) | 2023.10.16 |
---|---|
[C++] 영지(territory) 선택 🔥 (0) | 2023.10.16 |
[C++] 각 행의 평균과 가장 가까운 값 (1) | 2023.10.16 |
[C++] 봉우리 (1) | 2023.10.16 |
[C++] 멀티태스킹 (1) | 2023.10.16 |