2477번

2022. 12. 21. 10:49·CS 이론/알고리즘
728x90

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

 

2477번: 참외밭

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

www.acmicpc.net

이번 문제는 참외밭이다.

문제를 이해하면서 조금 어려움이 있었다. 처음에는 그냥 전체 넓이에서 짤린 부분을 계산하면 되겠지라고 생각해서 하는데 이게 주어지는 입력이 반시계방향 순서대로 주어지는게 맞는지 반례들을 보다보니 헷갈렸다. 그래서 도저히 모르겠어서 다른 사람들의 코드를 보면서 이해를 했다...

 

내가 맨 처음 생각한 원리와 비슷하지만 조금 다른 풀이 방법이다.

일단 제일 긴 가로와 세로를 구한다고 생각해야한다.

1,2,3,4가 순서대로 동,서,남,북을 나타내기 때문에 일단 동,서는 가로길이 남,북은 세로길이라고 생각한다.

그리고 이제 주어지는 입력은 반시계방향으로 주어지기 때문에 가로,세로,가로,세로,가로,세로 또는 세로,가로,세로,가로,세로,가로로 주어진다고 생각하면 쉽다.

따라서 제일긴 가로에 대해 양 옆, 즉 앞뒤의 세로길이 차와 제일긴 세로에 대해 양 옆, 즉 앞뒤의 가로길이 차가 잘려나간 부분의 넓이라고 생각하면 된다.

백준문제 예제

이해를 위해 백준문제에서 그림을 따왔다.

여기서 보이는 제일긴 가로 160과 제일긴 세로 50을 기준으로 했을 때, 잘려나간 세로의 길이는 제일긴 가로 160의 양옆에 있는 50과30의 차이이다. 그리고 잘려나간 가로의 길이는 제일긴 세로 50의 양옆에 있는 160과 100의 차이이다.

따라서 60*20이 되는것이다.

 

이를 이용해서 코드를 짜면 배열에 순서대로 값을 저장하면서 길이가 가장 긴 가로와 세로의 인덱스와 길이를 기억하면 계산할 수 있다.

if((direction==1||direction==2) && arr[i]>width){
    width=arr[i];
    widthI=i;
}else if((direction==3||direction==4) && arr[i]>height){
        height=arr[i];
        heightI=i;
}

위의 코드 조건문으로 가장 긴 가로,세로의 길이와 인덱스를 구하고, 아래의 조건문들로 제일긴 가로,세로의 양옆의 길이의 차를 구하면 된다.

if(widthI+1==6)right=0;
else right=widthI+1;
if(widthI-1==-1)left=5;
else left=widthI-1;
widthLn=Math.abs(arr[right]-arr[left]);
if(heightI+1==6)right=0;
else right=heightI+1;
if(heightI-1==-1)left=5;
else left=heightI-1;
heightLn=Math.abs(arr[right]-arr[left]);
int total=width*height-widthLn*heightLn;

그래서 정답코드는 아래와 같이 나온다.

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

public class b2477 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int K = Integer.parseInt(br.readLine());
        int[] arr = new int[6];
        int width = 0;//최대 가로길이
        int widthI = 0;//최대 가로길이의 인덱스
        int height = 0;//최대 세로길이
        int heightI = 0;//최대 세로길이의 인덱스
        for(int i=0; i<6;i++) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            int direction = Integer.parseInt(st.nextToken());
            arr[i]=Integer.parseInt(st.nextToken());//길이 대입
            if((direction==1||direction==2) && arr[i]>width){
                width=arr[i];
                widthI=i;
            }else if((direction==3||direction==4) && arr[i]>height){
                    height=arr[i];
                    heightI=i;
            }
        }
        int right,left,widthLn,heightLn;
        if(widthI+1==6)right=0;
        else right=widthI+1;
        if(widthI-1==-1)left=5;
        else left=widthI-1;
        widthLn=Math.abs(arr[right]-arr[left]);
        if(heightI+1==6)right=0;
        else right=heightI+1;
        if(heightI-1==-1)left=5;
        else left=heightI-1;
        heightLn=Math.abs(arr[right]-arr[left]);
        int total=width*height-widthLn*heightLn;
        System.out.println(K*total);
    }
}
728x90

'CS 이론 > 알고리즘' 카테고리의 다른 글

2981번  (1) 2022.12.23
1002번  (0) 2022.12.22
5430번  (1) 2022.12.20
1620번  (0) 2022.12.19
14425번  (1) 2022.12.19
'CS 이론/알고리즘' 카테고리의 다른 글
  • 2981번
  • 1002번
  • 5430번
  • 1620번
Bello's
Bello's
개발하는 벨로
  • Bello's
    벨로의 개발일지
    Bello's
  • 전체
    오늘
    어제
    • 분류 전체보기 (199) N
      • 노예 일지 (7)
        • 스타트업 노예일지 (3)
      • CS 이론 (81)
        • 학과 수업 (4)
        • 알고리즘 (64)
        • 시스템 프로그래밍 (3)
        • 데이터 통신 (1)
        • 운영체제 (2)
        • 데이터베이스 (1)
      • project (3)
      • 나는 감자다. (4)
      • Spring (27)
      • 모각코 (45)
        • 절개와지조(모각코) (7)
        • 어쩌다보니 박준태가 조장이조 (11)
        • 어쩌다보니 박준태가 또 조장이조 (12)
      • LikeLion🦁 (20)
      • 캘리포니아 감자 (4)
      • OpenSource Contribute (1)
      • 우아한테크벨로 (1) N
        • 프리코스 회고록 (6)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    뛰슈
    오블완
    나는 감자
    Spring
    누적합
    DFS
    감자
    티스토리챌린지
    타임리프
    그래프 순회
    백준
    자바
    JPA
    회고록
    모각코
    BFS
    절개와지조
    8기
    프리코스
    어렵다
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
Bello's
2477번
상단으로

티스토리툴바