컴공댕이 공부일지
[java] 백준 ( 2477 참외밭 ) 💥💦 본문
728x90
2477 참외밭
실버 2
https://www.acmicpc.net/problem/2477
2477번: 참외밭
첫 번째 줄에 1m2의 넓이에 자라는 참외의 개수를 나타내는 양의 정수 K (1 ≤ K ≤ 20)가 주어진다. 참외밭을 나타내는 육각형의 임의의 한 꼭짓점에서 출발하여 반시계방향으로 둘레를 돌면서 지
www.acmicpc.net
시험기간이라 바쁘지만 학교 공부하기 시러서 스트릭 잇기...ㅎ
오토마타 객지프 디논설 이산수학 소융창 수치해석이 날 기다리므로 빠르게 한 문제만 리뷰해보겠다.
[ 정답코드 ]
import java.util.Scanner;
public class P참외밭 {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
int k=s.nextInt();
int max0=0;
int max1=0;
int [][] arr = new int[2][6]; //길이와 가로세로 정보를 입력할 이차원 배열
for(int i=0; i<6; i++) {
int dr = s.nextInt();
if(dr==1 || dr==2) {
arr[0][i] = 0; //가로 방향 이동이면 1행에 0저장
} else {
arr[0][i] = 1; //세로 방향 이동이면 1행에 1저장
}
arr[1][i]=s.nextInt(); //2행에는 길이값 저장
}
//제대로 입력됐나 확인하기
for(int i=0; i<6; i++) {
System.out.print(arr[0][i]+" ");
}System.out.println();
for(int i=0; i<6; i++) {
System.out.print(arr[1][i]+" ");
}System.out.println();
//가로, 세로의 최댓값 찾기
int index0=0;
int index1=1;
for(int i=0; i<3; i++) {
max0=arr[1][0];
if(max0<arr[1][2]) {
max0=arr[1][2];
index0=2;
}
if (max0<arr[1][4]) {
max0=arr[1][4];
index0=4;
}
max1=arr[1][1];
if(max1<arr[1][3]) {
max1=arr[1][3];
index1=3;
}
if (max1<arr[1][5]) {
max1=arr[1][5];
index1=5;
}
}
//최댓값이랑 그때의 인덱스 잘 찾았는지 확인
System.out.println("max0:"+max0+" / max1:"+max1);
System.out.println("index0:"+index0+" / index1:"+index1);
int aU=max0*max1; //큰 사각형의 넓이
int aSub=0; //빼야하는 작은 사각형의 넓이
//작은 사각형 넓이 구하기
index0+=3;
index0%=6;
int a=arr[1][index0];
index1+=3;
index1%=6;
int b=arr[1][index1];
aSub=a*b;
System.out.println((aU-aSub)*k);
}
}
기하는 항상 문제 풀이는 수학적으로 너무 쉬운데..
이걸 컴퓨터로 구현하는 과정이 헷갈린다. 그래서 어떻게 풀까 방향 잡는데 좀 걸렸다.
처음엔 단순히 육각형을 사각형으로 쪼갈라서 문제를 푸는 법을 고민했으나...
풀이법이 잘 보이지 않아 큰 넓이에서 해당안되는 부분을 빼는 것으로 방향을 잡았다.
[ 풀이 ]
ㄱ,ㄴ 등의 모양으로 꺾인 육각형의 넓이를 구해야하므로
큰 직사각형(aU)에서 해당되지 않는 작은 직사각형의 넓이(aSub)를 빼기로 했다.
answer = (aU - aSub) * k
728x90
'문제 풀이 > 코딩 문제 풀이 모음' 카테고리의 다른 글
[java] 백준 ( 1157 단어공부 ) 아스키 코드 활용 (0) | 2023.04.07 |
---|---|
[java] 백준 ( 10950, 10951, 10952 A+B ) ★EOP (0) | 2023.04.06 |
[java] 백준 ( 13458 시험 감독 ) (0) | 2023.03.30 |
[java] 백준 ( 13015 별 찍기-23 ) (0) | 2023.03.24 |
[java] 백준 ( 10818 최소, 최대 / 1924 2007년) (1) | 2023.03.23 |
Comments