https://www.acmicpc.net/problem/2477
풀이 과정
결과를 구하는 수식 : (사각형의 넓이 - 빈 곳의 넓이) * 참외 개수
입력받은 데이터로 저 수식의 빈 값을 채워야 한다.
참외의 개수와 사각형의 넓이는 구하는 방법이 간단하다.
참외의 개수는 문제에도 쓰여 있듯이 제일 처음 입력받은 값이고
입력받은 가로의 길이 중 제일 큰 값과 세로의 길이 중 제일 큰 값을 곱해주면 사각형의 넓이가 나온다.
문제는 빈 곳의 넓이 이다.
입력 받은 값에서 빨간 표시 된 곳의 길이를 구해야 하는데
나는 아래와 같은 규칙을 사용하였다.
가로의 길이 중 제일 큰 값(이하 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 |
'void Algorithm' 카테고리의 다른 글
C# 백준 문제 번호 10989 - 수 정렬하기 3 (0) | 2022.04.13 |
---|---|
백준 문제 번호 : 1436 - 영화감독 숌 (0) | 2021.08.27 |
백준 문제 번호 : 1018 - 체스판 다시 칠하기 (0) | 2020.09.08 |
백준 문제 번호 : 7568 - 덩치 (0) | 2020.08.27 |
백준 문제 번호 : 2231 - 분해합 (0) | 2020.08.22 |