백준 2477번 참외밭

이상민·2023년 8월 22일
0

알고리즘

목록 보기
24/128
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Melon_Field {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        int k = Integer.parseInt(st.nextToken());
        int[] dir = new int[6];
        int[] len = new int[6];
        int y = 0;
        int x = 0;
        for (int i = 0; i < 6; i++) {
            st = new StringTokenizer(br.readLine());
            dir[i] = Integer.parseInt(st.nextToken());
            len[i] = Integer.parseInt(st.nextToken());
            if(dir[i]==4||dir[i]==3){
                y = Math.max(y,len[i]);
            }
            else if(dir[i]==2||dir[i]==1){
                x = Math.max(x,len[i]);
            }
        }
        int index = 0;
        int blank = 0;
        while (true) {
            if (len[index] == x) {
                if (len[(index+1)%6]==y){
                    blank= len[(index+3)%6]*len[(index+4)%6];
                    break;
                }
                else if(len[(index+5)%6]==y){
                    blank = len[(index+2)%6]*len[(index+3)%6];
                    break;
                }
            }
            index++;
        }
        int size = x*y - blank;
        System.out.println(size*k);

    }
}

풀이방법

큰틀에서 보자면 가장 긴 가로 변과 세로변을 곱해서 만든 사각형에서 작은 사각형을 빼는 방식으로 구현하였다.
1. 입력받을때 가장 킨 가로변, 세로변을 각각 x,y에 넣는다.
2. 📢작은 사각형을 구현하는 가로와 세로변은 각각 x,y의 인덱스와 두칸씩 떨어져 있었다. 이 부분이 풀이의 핵심이다.
3. x를 기준으로 y가 x다음 인덱스에 있다면(ex.len[0] == x, len[1] == y), x의 인덱스+3 를 해준 변이 작은 사각형의 y가 되고, x의 인덱스 +4을 해준 변이 작은 사각형의 x가 된다. (이때 인덱스 범위를 벗어나면 다시 도는것으로 생각한다.)
4. x를 기준으로 y가 x 이전 인덱스에 있다면(ex. len[1]==x, len[0]==y) x의 인덱스 +2 를 해준 변이 작은 사각형의 x가 되고, x의 인덱스 +3을 해준 변이 작은 사각형의 y가 된다.
5. 이렇게 구한 작은 사각형을 큰사각형에서 빼준다.

후기

약간 풀이가 잡스러워서 이렇게 푸는게 맞나 싶었는데 맞긴했다. 다른사람들은 어떻게 풀었나 좀 찾아봤는데 나만 그런게 아니라 다들 이런식으로 풀었다.
len[-1]값이 len[5]가 아니라 어떻게 처리해야 하는지 살짝 당황했다. 파이썬 문법이랑 헷갈린듯

profile
개린이

0개의 댓글