728x90

https://www.acmicpc.net/problem/2477

 

2477번: 참외밭

첫 번째 줄에 1m2의 넓이에 자라는 참외의 개수를 나타내는 양의 정수 K (1 ≤ K ≤ 20)가 주어진다. 참외밭을 나타내는 육각형의 임의의 한 꼭짓점에서 출발하여 반시계방향으로 둘레를 돌면서 지

www.acmicpc.net


풀이 방법

최대 세로길이와 가로길이를 구하고 나서 모든 방향에서 그림을 그려보면, 

1. 최대 가로길이 양옆 길이 중 작은 길이가 파란사각형의 세로길이

2. 최대 세로길이 양옆 길이 중 작은 길이가 노란사각형의 가로길이

-> 구해진 길이를 이용해 넓이 구함

 

JAVA 코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class BOJ_2477_참외밭 {
	static StringTokenizer st;
	public static void main(String[] args) throws IOException {
		BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
		int N=Integer.parseInt(br.readLine()); //참외 개수
		int[] input=new int[6];
		int maxR=0,maxC=0; // 최대 세로길이, 최대 가로길이
		int indexR=0,indexC=0;

		for (int i = 0; i < 6; i++) {
			st=new StringTokenizer(br.readLine());
			int dir=Integer.parseInt(st.nextToken());
			int distance=Integer.parseInt(st.nextToken());
			if(dir==3 || dir==4) {// r
				maxR=maxR<distance?distance:maxR;
				if (maxR==distance) indexR=i;
			}else { // c
				maxC=maxC<distance?distance:maxC;
				if (maxC==distance) indexC=i;
			}
			input[i]=distance;
			
		}
		int nextR1=input[5],nextC1=input[5]; // nextR1,R2 => 세로길이 후보
		int nextR2=input[0],nextC2=input[0]; // nextC1,C2 => 가로길이 후보
		if (indexC-1>-1) nextR1=input[indexC-1];
		if (indexC+1<6) nextR2=input[indexC+1];
		if (indexR-1>-1) nextC1=input[indexR-1];
		if (indexR+1<6) nextC2=input[indexR+1];
		
		// 최대 가로길이*세로길이후보 중 작은 길이 + 가로길이후보 중 작은 길이*(최대 세로길이-세로길이후보 중 작은 길이)
		int area=maxC*Math.min(nextR1, nextR2)+Math.min(nextC1, nextC2)*(maxR-(Math.min(nextR1, nextR2)));
		
		System.out.println(area*N);

	}
}

처음엔 반례를 못찾아서 뭐가 틀렸는지 몰랐었는데, 직접 반례를 만들어보면서 코드를 보니 ㄱ의 반대방향을 고려해주지 못해 틀린거였다. 그부분을 수정하고나니 맞았다! 

내가 틀렸던 반례는 

1
1 20
4 160
2 50
3 100
1 30
4 60
답 : 6200

728x90

'알고리즘 > 백준 BOJ' 카테고리의 다른 글

[JAVA] 백준 17413 단어 뒤집기 2  (0) 2021.08.30
[JAVA] 백준 2567 색종이-2  (0) 2021.08.30
[JAVA] 백준 13300 방배정  (0) 2021.08.28
[JAVA] 백준 16236 아기상어  (0) 2021.08.25
[JAVA] 백준 10026 적록색약  (0) 2021.08.23
복사했습니다!