본문 바로가기

Algorithm/Baekjoon BOJ

[백준][C++] 2477 : 참외밭

반응형

https://www.acmicpc.net/problem/2477

 

2477번: 참외밭

첫 번째 줄에 1m2의 넓이에 자라는 참외의 개수를 나타내는 양의 정수 K (1 ≤ K ≤ 20)가 주어진다. 참외밭을 나타내는 육각형의 임의의 한 꼭짓점에서 출발하여 반시계방향으로 둘레를 돌면서 지

www.acmicpc.net

 

 

 

 


- 문제

 

  ㄱ-자 와 비슷한 모양인 밭에서 자랄 수 있는 참외의 수를 구하는 문제이다.

 

 


- 해설

 

  total을 통해 1,2,3,4(방향) 중에서 한번씩만 나온 것을 곱해주면 총 사각형의 면적을 구할 수 있고,

 

small을 통해 1,2,3,4 중에서 두 번씩 나온 것들 중에서 사이에 작은 사각형을 만드는 길이들을 구해서 작은 사각형의 면적을 구해

 

빼주면 된다.

 

이후에 면적당 참외가 자라는 만큼 곱하면 답이 된다.

 

 


- 풀이

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

bool cmp(pair<int, int> a, pair<int, int> b)
{
    if (a.first == b.first)
        return a.second < b.second;
    return a.first < b.first;
}

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);

    int K, temp1, temp2, total = 1, small = 1;
    vector<int> count(4, 0);
    vector<int> v;
    vector<pair<int, int>> vp;
    cin >> K;
    for (int i = 0; i < 6; i++)
    {
        cin >> temp1 >> temp2;
        vp.push_back(pair<int, int>(temp1, temp2));
        count[temp1 - 1]++;
    }
    for (int i = 0; i < 6; i++)
    {
        if (count[vp[i].first - 1] == 1)
        {
            total *= vp[i].second;
            continue;
        }
        int next = (i + 1) % 6;
        int nextnext = (i + 2) % 6;
        if (vp[i].first == vp[nextnext].first)
        {
            small *= vp[next].second;
        }
    }
    cout << (total - small) * K;

    return 0;
}

 


- 새롭게 알게 된 점

 

X

반응형