728x90
반응형
문제
https://www.acmicpc.net/problem/2477
풀이 방법
처음에 살짝 헤맸던 문제였다. 그냥 단순히 예제만 보고 가로 중에 최대최소, 세로중에 최대최소 구하면 되는 줄 알았는데 아니였음;; 문제 제대로 읽자....
우선 나는 가장 큰 사각형에서 내부에 있는 작은 사각형을 빼주는 식으로 구현하려고 했다. 어디에서 시작하든 규칙은 방향이 A - B - C - D - C - D 순으로 나온다. 시작만 다르지 순서는 거의 동일함. (A, B가 긴변이고, D, C가 내부의 작은 사각형의 가로세로)
그래서 생각한게 우선 가로 중에서 가장 큰 값, 세로 중 가장 큰 값을 찾은 후에 해당 인덱스에 +3을 해주는 것이였다.
제출 코드
public class BJ_2477_참외밭 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int K = Integer.parseInt(st.nextToken());
int hMax = 0, wMax = 0; //각 가로 세로의 최대 길이 저장
int hMaxIdx = -1, wMaxIdx = -1; //가로 세로의 최대 길이의 인덱스 저장
int[] dirs = new int[6]; //순서대로 방향 저장
int[] dist = new int[6]; //변의 길이 저장
for (int i = 0; i < 6; i++) {
st = new StringTokenizer(br.readLine());
dirs[i] = Integer.parseInt(st.nextToken());
dist[i] = Integer.parseInt(st.nextToken());
if (dirs[i] == 1 || dirs[i] == 2) { //가로 방향이면
if (hMax < dist[i]) { //가로에 해당하는 변수들에 최대값, 인덱스 저장
hMax = dist[i];
hMaxIdx = i;
}
} else {//세로에 해당하는 변수들에 최대값, 인덱스 저장
if (wMax < dist[i]) {
wMax = dist[i];
wMaxIdx = i;
}
}
}
int maxSquare = wMax * hMax; //전체 사각형의 넓이
//각 인덱스의 +3을 하면 안에 있는 사각형의 길이를 가지고 있는 인덱스임
int minSquare = dist[(wMaxIdx + 3) % 6] * dist[(hMaxIdx + 3) % 6];
System.out.println((maxSquare-minSquare)*K);
}
}
728x90
반응형
'알고리즘 > BJ' 카테고리의 다른 글
[BJ] 백준 1759 암호만들기 (JAVA) (0) | 2022.02.22 |
---|---|
[BJ] 백준 1260 DFS와 BFS (JAVA) (0) | 2022.02.21 |
[BJ] 10157 자리배정 (JAVA) (0) | 2022.02.19 |
[BJ] 13305 주유소 (0) | 2022.02.19 |
[BJ] 0217 알고리즘 문제풀이(BJ_1987_알파벳, BJ_2491_수열,BJ_2564_경비원, BJ_3109_빵집,BJ_5052_전화번호목록 ) (0) | 2022.02.17 |