728x90
<문제 풀이/접근과정>
1. ㄱ의 모양은 상관이 없다. 임의의 위치에서 반시계방향으로 돌기 때문에 ㄱ방향보다 중요한 것은 움푹패인 곳이 어디냐이다.
2. 원형큐 개념으로 접근하면 움푹패인 곳을 파악할 수 있는 방법은 두 가지가 있다(한 가지는 스터디의 굇수분이 유도한 개념)
2-1 움푹패인곳의 길이는 이전 배열의 선분과 다음 배열의 선분의 수직이다 -> 1 3 1 / 1 4 1 / 2 3 2 / 2 4 2 / 3 1 3 / 3 2 3 / 4 1 4 / 4 2 4
2-2 가장 긴 가로, 세로 변은 붙어 있을 수 밖에 없다. 가장긴 선분 다음의 +2, +3번째 인덱스의 선분이 바로 움푹패인 곳이다.
3. 구현은 모듈러로 해도 되지만 그냥 하드코딩으로 짰다.
<소스 코드>
package boj;
import java.util.Scanner;
public class Boj_2477 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int count = sc.nextInt();
int arr[][] = new int[8][2];
int maxWidth = 0;
int maxHeight = 0;
int tempWidth = 0;
int tempHeight = 0;
for (int i = 1; i < 7; i++) {
arr[i][0] = sc.nextInt();
arr[i][1] = sc.nextInt();
if(arr[i][0] < 3) {
maxWidth = Math.max(arr[i][1], maxWidth);
}else {
maxHeight = Math.max(arr[i][1], maxHeight);
}
}
arr[0][0] = arr[6][0];
arr[0][1] = arr[6][1];
arr[7][0] = arr[1][0];
arr[7][1] = arr[1][1];
for (int i = 1; i < 7; i++) {
if(arr[i-1][0] == arr[i+1][0] && arr[i][0] <3) {
tempWidth = arr[i][1];
}else if(arr[i-1][0] == arr[i+1][0] && arr[i][0] >= 3) {
tempHeight = arr[i][1];
}
}
System.out.println((maxWidth * maxHeight - tempWidth*tempHeight) * count);
sc.close();
}
}
728x90
'알고리즘공부(Algorithm Study) > 문제풀이(ProblemSolving)' 카테고리의 다른 글
백준 1358 java - 하키(기하/백준단계별로풀기 기하 clear) (0) | 2022.05.19 |
---|---|
백준 1004 java - 어린왕자(기하) (0) | 2022.05.18 |
백준 11660 java - 구간 합 구하기 5(누적합) (0) | 2022.05.13 |
백준 10986 java - 나머지 합(누적합, feat. 골드1달성) (2) | 2022.05.13 |
백준 16139 java - 인간-컴퓨터 상호작용(누적합) (0) | 2022.05.11 |
댓글