본문 바로가기

Algorithm/BOJ

[BOJ-2477][구현] 참외밭 - Java

문제 바로가기

 

2477번: 참외밭

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

www.acmicpc.net

 

문제에서 요구하는 답은 아주 간단합니다.

근데 인풋이 좀 희한하게 들어와서 쪼끔 생각해주어야 합니다.

import java.io.*;
import java.util.*;

public class Main {
	static class Info{
		int dir, length;
		Info(int dir, int length){
			this.dir = dir; this.length = length;
		}
	}
	
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st;
		List<Info> list = new ArrayList<>();
		int K = Integer.parseInt(br.readLine());
		
		int N = 0, M = 0;		// 세로, 가로
		for(int i = 0; i < 6; i++) {
			st = new StringTokenizer(br.readLine(), " ");
			list.add(new Info(Integer.parseInt(st.nextToken()), Integer.parseInt(st.nextToken())));
			if(list.get(i).dir == 1 || list.get(i).dir == 2) 
				N = Math.max(list.get(i).length, N);
			if(list.get(i).dir == 3 || list.get(i).dir == 4) 
				M = Math.max(list.get(i).length, M);
		}
		list.add(list.get(0));
		int answer = M * N;
		
		for(int i = 0; i < list.size() - 1; i++) {
			Info f = list.get(i);
			Info s = list.get(i+1);
			if((f.dir == 1 && s.dir == 3) || (f.dir == 2 && s.dir == 4) || (f.dir == 3 && s.dir == 2) || (f.dir == 4 && s.dir == 1)) {
				answer -= f.length * s.length;
				break;
			}
		}
		
		System.out.println(answer * K);
	}
}

 

참외밭의 모양은 4가지가 있씁니다.

 

우선 입력받을 때 전체 사각형의 가로, 세로 크기를 구해줍시다.

 

안쪽으로 파여있는 사각형의 크기를 구하는게 관건인데용.

그것은 인풋의 방향을 잘 보면 쉽게 구할 수 있습니다.

 

먼저 테케 모양일 때는 3131 이 부분이 안쪽으로 들어가는 부분입니다.

┛ 모양은 2323,

┗ 모양은 4242,

┏ 모양은 1414 이런 식으로 나타납니당.

 

우린 안쪽 사각형의 크기를 구하면 되니깐 위에서부터 방향이 13, 32, 24, 41 인 경우의 길이를 갖고 계산해주면 끝입니다.

 

 

감사합니다 ^_^