백준 2477 참외밭 (JAVA 자바 풀이)
📌 문제
1m2의 넓이에 자라는 참외의 개수와, 참외밭을 이루는 육각형의 임의의 한 꼭짓점에서 출발하여 반시계방향으로 둘레를 돌면서 지나는 변의 방향과 길이가 순서대로 주어진다. 이 참외밭에서 자라는 참외의 수를 구하는 프로그램을 작성하시오.
⚔ 입력
첫 번째 줄에 1m2의 넓이에 자라는 참외의 개수를 나타내는 양의 정수 K (1 ≤ K ≤ 20)가 주어진다. 참외밭을 나타내는 육각형의 임의의 한 꼭짓점에서 출발하여 반시계방향으로 둘레를 돌면서 지나는 변의 방향과 길이 (1 이상 500 이하의 정수) 가 둘째 줄부터 일곱 번째 줄까지 한 줄에 하나씩 순서대로 주어진다. 변의 방향에서 동쪽은 1, 서쪽은 2, 남쪽은 3, 북쪽은 4로 나타낸다.
📣 출력
첫째 줄에 입력으로 주어진 밭에서 자라는 참외의 수를 출력한다.
💎 문제 분석
큰 거에서 작은 걸 빼주면 간단한데 문제는 작은 거를 어떻게 구하느냐이다.
큰 거는 max 값으로 쉽게 구할 수 있다.
작은 사각형은 특징이 있는데 반드시 제일 큰 값 양 옆에 위치한다는 것이다. 가로나 세로나 동일하기 때문에 가장 큰 값의 양 변을 구해주면 작은 사각형이 나온다.
if문을 분기해서 구할 수도 있지만 6이라는 제한된 숫자가 가진 특징을 사용해서 규칙을 발견할 수 있다.
💡 코드 구현
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 bufferedReader = new BufferedReader(new InputStreamReader(System.in));
int melonCounts = Integer.parseInt(bufferedReader.readLine());
int[] melonField = new int[6];
for (int i = 0; i < 6; i++) {
StringTokenizer stringTokenizer = new StringTokenizer(bufferedReader.readLine());
int direction = Integer.parseInt(stringTokenizer.nextToken());
int length = Integer.parseInt(stringTokenizer.nextToken());
melonField[i] = length;
}
int xMax = 0;
int xMaxIndex = 0;
int yMax = 0;
int yMaxIndex = 0;
for (int i = 0; i < 6; i++) {
if (i % 2 == 0) {
if (melonField[i] >= xMax) {
xMax = melonField[i];
xMaxIndex = i;
}
}
if (i % 2 != 0) {
if (melonField[i] >= yMax) {
yMax = melonField[i];
yMaxIndex = i;
}
}
}
int xSmall = Math.abs(melonField[Math.abs(xMaxIndex + 5) % 6] - melonField[Math.abs(xMaxIndex + 1) % 6]);
int ySmall = Math.abs(melonField[Math.abs(yMaxIndex + 5) % 6] - melonField[Math.abs(yMaxIndex + 1) % 6]);
System.out.println((xMax * yMax - xSmall * ySmall) * melonCounts);
}
}
반응형
'알고리즘 > 백준' 카테고리의 다른 글
백준 2981 검문 (JAVA 자바 풀이) (0) | 2022.12.04 |
---|---|
백준 2609 최대공약수와 최소공배수 (JAVA 자바 풀이) (0) | 2022.12.04 |
백준 3009 네 번째 점 (JAVA 자바 풀이) (0) | 2022.12.04 |
백준 11478 서로 다른 부분 문자열의 개수 (JAVA 자바 풀이) (0) | 2022.12.04 |
백준 1269 대칭 차집합 (JAVA 자바 풀이) (0) | 2022.12.04 |