이 영역을 누르면 첫 페이지로 이동
시간의화살 블로그의 첫 페이지로 이동

시간의화살

페이지 맨 위로 올라가기

시간의화살

행복하세요

[백준] 2304 창고 다각형 - Java

  • 2022.04.25 08:24
  • Algorithm/Baekjoon

 

 

 

두 번 계산해서 풀었다.

 

정방향으로 계산하면서 가장 높은 높이에 대한 기둥을 얻고, 가장 높은 기둥 전까지의 넓이를 갱신한다.

그 후 역방향으로 계산하면서 가장 높은 기둥 뒷부분의 넓이를 갱신한다.

 

 

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

public class Main {   
    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        
        ArrayList<pilar> list = new ArrayList<>();

        int N = Integer.parseInt(br.readLine());

        StringTokenizer st;

        for(int i=0; i<N; i++){
            st = new StringTokenizer(br.readLine());
            int x = Integer.parseInt(st.nextToken());
            int h = Integer.parseInt(st.nextToken());

            list.add(new pilar(x,h));
        }

        Collections.sort(list);              

        int target_x = list.get(0).x;
        int target_h = list.get(0).h;

        int ans = 0;

        int cand = 0;

        int max_idx = 0;        

        for(int i=1; i<list.size(); i++){
            if(list.get(i).h >= target_h){                
                ans = ans + (list.get(i).x - target_x) * target_h;
                target_x = list.get(i).x;
                target_h = list.get(i).h;
                max_idx = i;                                                              
            }
          
        } // end of for i

        target_x = list.get(list.size()-1).x;
        target_h = list.get(list.size()-1).h;

        pilar temp = new pilar(1,1);

        for(int i=list.size()-2; i>=max_idx; i--){
            if(target_h <= list.get(i).h){
                ans = ans + (target_x - list.get(i).x) * target_h;
                target_x = list.get(i).x;
                target_h = list.get(i).h;
                temp = list.get(i);
            }
        }
        
        ans = ans + list.get(max_idx).h;

        System.out.println(ans);                    
 
    }

    static class pilar implements Comparable<pilar>{
        int x;
        int h;

        pilar(int a, int b){
            x = a;
            h = b;
        }


        public int compareTo(pilar o2){
            if(x > o2.x){
                return 1;
            }else if(x < o2.x){
                return -1;
            }else{
                return 0;
            }
        }
    }
}
반응형

'Algorithm > Baekjoon' 카테고리의 다른 글

[백준] 9625 BABBA - Java  (0) 2022.05.01
[백준] 2257 화학식량 - Java  (0) 2022.04.25
[백준] 16165 걸그룹 마스터 준석이 - Java  (0) 2022.04.24
[백준] 9322 철벽 보안 알고리즘 - Java  (0) 2022.04.24
[백준] 3077 임진왜란 - Java  (0) 2022.04.24

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • [백준] 9625 BABBA - Java

    [백준] 9625 BABBA - Java

    2022.05.01
  • [백준] 2257 화학식량 - Java

    [백준] 2257 화학식량 - Java

    2022.04.25
  • [백준] 16165 걸그룹 마스터 준석이 - Java

    [백준] 16165 걸그룹 마스터 준석이 - Java

    2022.04.24
  • [백준] 9322 철벽 보안 알고리즘 - Java

    [백준] 9322 철벽 보안 알고리즘 - Java

    2022.04.24
다른 글 더 둘러보기

정보

시간의화살 블로그의 첫 페이지로 이동

시간의화살

  • 시간의화살의 첫 페이지로 이동

검색

방문자

  • 전체 방문자
  • 오늘
  • 어제

카테고리

  • 분류 전체보기 (606) N
    • Algorithm (205)
      • Data Structure (5)
      • Theory && Tip (33)
      • Baekjoon (166)
      • ALGOSPOT (1)
    • Spring (123)
      • Spring (28)
      • Spring Web MVC (20)
      • Spring Database (14)
      • Spring Boot (6)
      • Spring 3.1 (11)
      • Spring Batch (6)
      • Spring Security (16)
      • JPA (12)
      • Spring Data JPA (5)
      • QueryDSL (4)
      • eGovFramework (1)
    • Programming Language (74)
      • Java (19)
      • JavaScript (15)
      • C (25)
      • C++ (12)
      • Python (1)
      • PHP (2)
    • Computer Science (69) N
      • Operating System (18)
      • Computer Network (17) N
      • System Programming (22)
      • Universial Programming Lang.. (8)
      • Computer Architecture (4)
    • Database (21)
      • Database (7)
      • MySQL (3)
      • Oracle (3)
      • Redis (5)
      • Elasticsearch (3)
    • DevOps (20)
      • Docker && Kubernetes (8)
      • Jenkins (4)
      • Github Actions (0)
      • Amazon Web Service (8)
    • Machine Learning (28)
      • AI Introduction (28)
    • Mobile (28)
      • Android (21)
      • Flutter (7)
    • Solutions (13)
    • Life Logs (0)
    • 낙서장 (25)

최근 글

나의 외부 링크

메뉴

  • 홈

정보

13months의 시간의화살

시간의화살

13months

블로그 구독하기

  • 구독하기
  • RSS 피드

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. Copyright © 13months.

티스토리툴바