문제
https://www.acmicpc.net/problem/2477
분석/설계
최대 넓이를 가지는 가로 * 세로를 구하고
최소 넓이를 가지는 가로*세로를 구하여 최대 넓이 - 최소 넓이 빼주고
거기에 참외수를 곱하여 방식으로 처음에 생각하고 접근하였습니다.
1. 입력받은 문자열을 각각의 문자로 쪼개 확인합니다.
2. 최대 넓이를 가지는 가로, 세로의 길이 각 입력 값을 받아 방향에 따라 각각의 최대 값을 구해주면 됩니다.
3. 최소 넓이는 꺽이는 부분을 고려하여, 아래와 같이 정의하고 i 위치에따른 이전 변과 다음 변의 방향이 같으면
i는 최소 넓이를 구하는 가로 또는 세로 중에 하나이므로 이를 저장합니다.
4. 마지막으로 구해진 최대, 최소 가로와 세로 값 그리고 참외 수를 곱해서 결과 값을 구합니다.
구현 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int K = Integer.parseInt(br.readLine());
int maxHeight = 0;
int maxWidth = 0;
int minHeight = 0;
int minWidth = 0;
int[] dirArr = new int[6];
int[] distArr = new int[6];
for(int i=0; i<6; i++) { // 1. 입력받은 문자열을 각각의 문자로 쪼개 확인합니다.
String[] input = br.readLine().split(" ");
dirArr[i] = Integer.parseInt(input[0]);
distArr[i] = Integer.parseInt(input[1]);
// 2. 최대 넓이를 가지는 가로, 세로의 길이 각 입력 값을 받아 방향에 따라 각각의 최대 값을 구해주면 됩니다.
if (dirArr[i] == 1 || dirArr[i] == 2) {
maxWidth = Math.max(maxWidth, distArr[i]);
} else {
maxHeight = Math.max(maxHeight, distArr[i]);
}
}
// 3. 최소 넓이는 꺽이는 부분을 고려하여, 아래와 같이 정의하고 i 위치에따른 이전 변과 다음 변의 방향이 같으면
// i는 최소 넓이를 구하는 가로 또는 세로 중에 하나이므로 이를 저장합니다.
for(int i=0; i<6; i++) { // 최소 넓이를 가진 넓이를 구한다.
// i를 최소 넓이의 가로 또는 세로라고 가정한다.
int before = (i+5) % 6;
int after = (i+1) % 6;
if (dirArr[before] == dirArr[after]) { // i 기준으로 이전과 다음에 나올 변의 방향이 같으면
if (dirArr[i] == 1 || dirArr[i] == 2) { // 방향에 따라 가장 작은 크기 가로, 세로
minWidth = distArr[i];
} else {
minHeight = distArr[i];
}
}
}
// 4. 마지막으로 구해진 최대, 최소 가로와 세로 값 그리고 참외 수를 곱해서 결과 값을 구합니다.
int result = (maxHeight * maxWidth - minHeight * minWidth) * K; // (최대 넓이 - 최소 넓이) * 참외 개수
System.out.println(result);
}
}
정리
최소 넓이의 가로 세로를 어떤식으로 기준을 잡고 구할지가 쉽게 떠오르지 않습니다.
문제에 주어진 조건을 잘 확인하고 고민해봐야합니다.
참고
'Algorithm > 구현' 카테고리의 다른 글
[백준] 배열돌리기 1 (0) | 2022.12.23 |
---|---|
[백준] 마인크래프트 (0) | 2022.12.23 |
괄호의 값 (1) | 2022.12.14 |
구현 - 문자열 재정렬 (0) | 2022.03.17 |