sm 기술 블로그

100. 2477(참외 밭) 본문

문제/백준_자바

100. 2477(참외 밭)

sm_hope 2022. 6. 22. 18:13
import java.util.*;
import java.io.*;

class Main{
    public static void main(String args[])throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        ArrayList<Integer> melonGround = new ArrayList<>();
        int melon = Integer.parseInt(br.readLine());

        for(int i = 0; i < 6; i++) {
            String[] sBit = br.readLine().split(" ");
            melonGround.add(Integer.parseInt(sBit[1]));
        }

        for(int i = 0; i < 6; i++) {
            melonGround.add(melonGround.get(i));
        }

        int melonMaxIndex = melonGround.lastIndexOf(Collections.max(melonGround));
        int GroundA = melonGround.get(melonMaxIndex-1)*melonGround.get(melonMaxIndex-2);
        int GroundB = melonGround.get(melonMaxIndex-4)*melonGround.get(melonMaxIndex-5);

        System.out.println((GroundA+GroundB)*melon);
    }
}

문제요약

ㄱ 자 직사각형 넓이를 구하시오.

해설

고민을 많이 했다. ㄱ을 어떻게 넓이를 구할지 말이다.

처음에는 큰 직사각형을 만들고 잘라진 부분의 삼각형을 빼는 방식으로 생각했다.

일단 동서남북의 숫자는 다음과 같다

그 다음

빨간부분을 빼보자 했지만 구현을 어떻게 할지 모르겠어서 포기했다.

다시 다른방법으로 접근했는데 직사각형 두개를 구해서 더하면 되지 않을까 했다.

다음과 같이 빨간부분, 주황부분을 구해서 더하면 그것 또한 직사각형 넓이이다.

 

먼저 예제 입력을 기준으로 경우의 수를 준비했다.

(1)
7
4 50
2 160
3 30
1 60
3 20
1 100

(2)
7
1 100
4 50
2 160
3 30
1 60
3 20

(3)
7
3 20
1 100
4 50
2 160
3 30
1 60

(4)
7
1 60
3 20
1 100
4 50
2 160
3 30

(5)
7
3 30
1 60
3 20
1 100
4 50
2 160

(6)
7
2 160
3 30
1 60
3 20
1 100
4 50

총 6가지의 경우의 수가 나오며 이에 다 적합해야 문제를 올바르게 푼 것이다.

 

보면 가장 큰 수의 인덱스에서 -2 -1 을 곱한 값과 -4 -5 곱한 값을 더하면 직사각형 값을 구할 수 있었다.

 for(int i = 0; i < 6; i++) {
            melonGround.add(melonGround.get(i));
        }

만약 가장 큰 값을 가진 인덱스가 4이하일 때, -1인덱스는 없기 때문에 똑같이 값을 한번 더 넣어 주었다.

그러면 

50
160
30
60
20
100
50
160
30
60
20
100

다음과 같이 값이 들어갈 것이다.

  int melonMaxIndex = melonGround.lastIndexOf(Collections.max(melonGround));
        int GroundA = melonGround.get(melonMaxIndex-1)*melonGround.get(melonMaxIndex-2);
        int GroundB = melonGround.get(melonMaxIndex-4)*melonGround.get(melonMaxIndex-5);

        System.out.println((GroundA+GroundB)*melon);

한번 더 값을 넣어 주었기 때문에 뒤에서 부터 가장 큰 값을 찾는다.

그 인덱스를 기준으로 위에서 구한 공식을 적용하여 구한다.

 

'문제 > 백준_자바' 카테고리의 다른 글

102. 1002(터렛)  (0) 2022.06.22
101. 택시 기하학(3053)  (0) 2022.06.22
99. 4153(직각삼각형)  (0) 2022.06.21
98. 3009(네 번째 점)  (0) 2022.06.21
97. 1085(직사각형에서 탈출)  (0) 2022.06.21
Comments