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

 

2477번: 참외밭

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

www.acmicpc.net

풀이 과정

결과를 구하는 수식 : (사각형의 넓이 - 빈 곳의 넓이) * 참외 개수

 

입력받은 데이터로 저 수식의 빈 값을 채워야 한다.

 

참외의 개수와 사각형의 넓이는 구하는 방법이 간단하다.

 

참외의 개수는 문제에도 쓰여 있듯이 제일 처음 입력받은 값이고 

입력받은 가로의 길이 중 제일 큰 값과 세로의 길이 중 제일 큰 값을 곱해주면 사각형의 넓이가 나온다.

 

문제는 빈 곳의 넓이 이다.

 

입력 받은 값에서 빨간 표시 된 곳의 길이를 구해야 하는데 

나는 아래와 같은 규칙을 사용하였다. 

가로의 길이 중 제일 큰 값(이하 A) 의 다음(반시계방향) 세로의 길이가 최대 값이면 

A 인덱스에 +3,+4 해준 값 2개를 사용 ex) A의 인덱스가 0이면 3,4번 인덱스가 빈 곳의 가로 세로 넓이

세로의 길이가 최대 값이 아니라면  A 인덱스에 +2, +3 해준 값 2개를 사용 ex) A의 인덱스가 0이면 2,3번 인덱스가 빈 곳의 가로 세로 넓이

 

 아래는 구현 소스이다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
using System;
class Program
{    
    static void Main(string[] args)    
    {
         int melonCount = int.Parse(Console.ReadLine());
            int[] sideLength = new int[6];
            bool StartWidth = false;
            int MaxWidthIndex = -1, MaxLengthIndex = -1;
            int X, Y, xIndex, yIndex;
 
            for(int i = 0; i < 6; i++)
            {
                string[] temp = Console.ReadLine().Split();
                if(i == 0 && int.Parse(temp[0]) < 3)
                {
                    StartWidth = true;
                }
 
                sideLength[i] = int.Parse(temp[1]);
            }
            // 최대 값 구하기
            for(int i = 0; i < 6; i++)
            {
                if(StartWidth)
                {
                    if(i % 2 == 0)
                    {
                        if (MaxWidthIndex == -1)
                        {
                            MaxWidthIndex = i;
                            continue;
                        }
                        if (sideLength[MaxWidthIndex] < sideLength[i]) MaxWidthIndex = i;
                    }
                    else
                    {
                        if(MaxLengthIndex == -1)
                        {
                            MaxLengthIndex = i;
                            continue;
                        }
                        if (sideLength[MaxLengthIndex] < sideLength[i]) MaxLengthIndex = i;
                    }
                }
                else
                {
                    if (i % 2 == 0)
                    {
                        if (MaxLengthIndex == -1)
                        {
                            MaxLengthIndex = i;
                            continue;
                        }
                        if (sideLength[MaxLengthIndex] < sideLength[i]) MaxLengthIndex = i;
                    }
                    else
                    {
                        if (MaxWidthIndex == -1)
                        {
                            MaxWidthIndex = i;
                            continue;
                        }
                        if (sideLength[MaxWidthIndex] < sideLength[i]) MaxWidthIndex = i;
                    }
                }
            }
 
            int comp = MaxWidthIndex + 1;
            if (comp > 5) comp -= 6;
 
            if (comp == MaxLengthIndex)
            {
                xIndex = MaxWidthIndex + 3;
                if (xIndex > 5) xIndex -= 6;
                yIndex = MaxWidthIndex + 4;
                if (yIndex > 5) yIndex -= 6;
            }
            else
            {
                xIndex = MaxWidthIndex + 2;
                if (xIndex > 5) xIndex -= 6;
                yIndex = MaxWidthIndex + 3;
                if (yIndex > 5) yIndex -= 6;
            }
 
            X = sideLength[xIndex];
            Y = sideLength[yIndex];
            int result = ((sideLength[MaxWidthIndex] * sideLength[MaxLengthIndex]) - (X * Y)) * melonCount;
            Console.WriteLine(result);
    }
}
 
cs

 

 

+ Recent posts