입력
- 변의 방향이 동,서(1,2)일 경우 가로변, 변의 방향이 남,북(3,4)일 경우 세로변임을 알 수 있음.
- 6각형이고 입력이 순서대로 들어오므로 변의 방향과 길이를 저장하기 위한 2차원 배열을 생성하여 저장함.
문제 풀이
- ㄱ자 모양이라는 것에서 아이디어를 얻음
- 그림과 같이 큰 사각형에서 작은 사각형을 빼면 ㄱ자 도형의 면적을 구할 수 있음
- 큰 사각형의 면적
- 주어진 변의 길이중 가장 긴 가로 변, 세로변의 길이를 구해서 곱하면 됨.
- 작은 사각형
- 주어진 정보를 이용해서 가장 긴 가로변을 구할 수 있음. (위에 큰 사각형의 면적을 구하기 위해서도 필요)
- 최장 가로변 양옆에는 두 개의 세로변이 위치함. 이 때 두 변의 차이를 구하면 우리가 구하고자하는 작은 사각형의 세로변이 됨.
- 인접한 변의 길이는 배열에 담아 놨으므로 최장 가로변 인덱스 -1, +1을 이용해서 찾아줄 수 있고, 최장 가로변이 어디에 위치하고 있을 지 알 수 없으므로 나머지 연산을 이용해서 인접한 변을 찾을 수 있도록 설정함
소스코드 - python
melon = int(input()) #참외수
arr = [list(map(int,input().split())) for _ in range(6)]
# print(arr)
w = 0; w_idx = 0 #가장 긴 가로변 길이, 인덱스 초기화
h = 0; h_idx = 0 #가장 긴 세로변 길이, 인덱스 초기화
for i in range(len(arr)):
if arr[i][0] == 1 or arr[i][0] == 2: #방향이 동,서면 가로
if w < arr[i][1]: #가장 큰값,인덱스 찾기
w = arr[i][1]
w_idx = i
elif arr[i][0] == 3 or arr[i][0] == 4: #남,북이면 세로
if h < arr[i][1]:
h = arr[i][1]
h_idx = i
# print(w,h)
#가장 긴 가로변 양옆에 붙어있는 변(세로변)들의 차이 : 뺄 사각형의 세로
#가장 긴 세로변 양옆에 붙어있는 변(가로변)들의 차이 : 뺄 사각형의 가로
subW = abs(arr[(w_idx - 1) % 6][1] - arr[(w_idx + 1) % 6][1])
subH = abs(arr[(h_idx - 1) % 6][1] - arr[(h_idx + 1) % 6][1])
# print(subW,subH)
ans = ((w*h) - (subW*subH)) * melon
print(ans)
'알고리즘 > 백준' 카테고리의 다른 글
[백준/정올] 2527. 직사각형 / 2568. 직사각형 (0) | 2020.11.11 |
---|---|
[백준] 2638. 치즈 - python (0) | 2020.07.28 |
[백준] 19236. 청소년상어 - python (0) | 2020.07.15 |
[백준] 17471. 게리맨더링 - python (0) | 2020.07.13 |
[백준]2468. 안전영역 - python (0) | 2020.07.08 |