https://www.acmicpc.net/problem/2477
문제부터 간단하게 요약하면,
ㄱ자를 회전 시킨 모양의 밭이 주어지고, 임의의 한 꼭짓점에서 반시계 방향으로 둘레의 변의 길이들이 주어집니다. 이 때, 밭의 넓이를 통해 밭에서 자라는 참외의 수를 구하는 문제입니다.
<Solution>
단위 면적당 자라는 갯수가 주어지므로, 넓이만 구하면 됩니다.
물론 가장 긴변의 양옆 변을 통해 찾는등 다른 방법들도 많겠지만,
그냥 주어진 변들을 이웃한 것들 끼리 모두 곱해서 더하고, 이 과정중 가장 큰 값을 기록합니다. 그리고 모두 더한 값에서 가장 큰 값을 두번 빼주면 넓이가 나옵니다.
그림을 통해 간단하게 그려보면,
보라색 부분의 밭이 있다고 가정하고, 각각 이웃한 두변을 모두 곱해서 더해주면, 밭의 영역은 3번 더해졌고, 외곽은 두번 더해진 것을 알 수 있습니다. 따라서 가장 큰 계산값을 두번 빼주면 밭의 넓이를 계산할 수 있음을 알 수 있습니다.
코드 구현은 아래와 같습니다.
#include <iostream>
using namespace std;
int K;
int A[6+10];
int B[6+10];
void InputData(){
cin >> K;
for (int i=0 ; i<6 ; i++){
cin >> A[i] >> B[i];
}
}
int sol(){
int tmp = 0;
int max_k = 0;
for(int i = 0; i<6; i++){
int k = B[i]*B[(i+1)%6];
tmp += k;
max_k = max(max_k, k);
}
return (tmp - 2*max_k) * K;
}
int main(){
int ans = -1;
InputData();
ans = sol();
cout << ans << endl;
return 0;
}
반응형
'코딩테스트 > C++ 문제풀이' 카테고리의 다른 글
[백준] 매직 스타 (0) | 2022.11.29 |
---|---|
[백준] Escaping the Farm (1) | 2022.11.29 |
[정올] Uniqueness (0) | 2022.11.27 |
[백준] 연속부분최대곱 (0) | 2022.11.27 |
[백준] 빙고 (0) | 2022.11.27 |