728x90
문제
https://www.acmicpc.net/problem/2477
참외밭의 변 길이와 방향이 주어졌을 때, 참외밭의 면적을 구하고 참외의 개수를 출력하는 문제
접근 방법
- 주어진 참외밭의 변 길이와 방향을 통해 큰 사각형의 최대 너비와 높이를 구합니다.
- 큰 사각형에서 제외할 작은 사각형의 너비와 높이를 구합니다.
- 큰 사각형의 면적에서 작은 사각형의 면적을 빼서 참외밭의 실제 면적을 구합니다.
- 이 면적에 참외의 개수 K를 곱하여 총 참외의 수를 도출합니다.
구현
- 입력받기: 참외의 개수 K와 참외밭의 변 길이와 방향을 입력받습니다.
- 큰 사각형의 변 길이 구하기: 방향이 1 또는 2인 경우(동쪽, 서쪽) 가장 긴 변을 maxWidth로 설정하고, 방향이 3 또는 4인 경우(남쪽, 북쪽) 가장 긴 변을 maxHeight로 설정합니다.
- 작은 사각형의 변 길이 구하기: 큰 사각형의 변을 기준으로 작은 사각형의 변의 길이를 구합니다. 작은 사각형의 너비(minWidth)와 높이(minHeight)를 구하기 위해 이전 변과 다음 변의 차이를 계산합니다.
- 참외밭의 면적 계산: 큰 사각형의 면적에서 작은 사각형의 면적을 빼서 참외밭의 실제 면적을 구한 후, 이를 참외의 개수 K와 곱하여 결과를 출력합니다.
코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
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[] directions = new int[6];
int[] lengths = new int[6];
StringTokenizer st;
for (int i = 0; i < 6; i++) {
st = new StringTokenizer(br.readLine(), " ");
directions[i] = Integer.parseInt(st.nextToken());
lengths[i] = Integer.parseInt(st.nextToken());
}
int maxWidth = 0;
int maxHeight = 0;
int minWidth = 0;
int minHeight = 0;
for (int i = 0; i < 6; i++) {
if(directions[i] == 1 || directions[i] == 2) {
if (maxWidth < lengths[i]) {
maxWidth = lengths[i];
}
} else if (directions[i] == 3 || directions[i] == 4) {
if (maxHeight < lengths[i]) {
maxHeight = lengths[i];
}
}
}
for (int i = 0; i < 6; i++) {
if ((directions[i] == 1 || directions[i] == 2) && lengths[i] == maxWidth) {
minHeight = Math.abs(lengths[(i + 5) % 6] - lengths[(i + 1) % 6]);
} else if ((directions[i] == 3 || directions[i] == 4) && lengths[i] == maxHeight) {
minWidth = Math.abs(lengths[(i + 5) % 6] - lengths[(i + 1) % 6]);
}
}
int result = ((maxWidth * maxHeight) - (minWidth * minHeight)) * K;
System.out.println(result);
}
}
메모리:14128kb 시간:96ms
728x90
'IT 개발 관련 > [Algorithm]' 카테고리의 다른 글
[백준] 1251번 : 단어 나누기 - Java (0) | 2024.06.22 |
---|---|
[백준] 18352번 : 특정 거리의 도시 찾기 - Java (0) | 2024.06.21 |
[백준] 1193번 : 분수찾기 - Java (0) | 2024.06.20 |
[백준] 9655번 : 돌 게임 - Java (0) | 2024.06.16 |
[백준] 1697번 : 숨바꼭질 - Java (0) | 2024.06.11 |