공부하기/백준

[Java] 백준 풀기 28014 - 첨탑 밀어서 부수기

XEV 2023. 9. 11. 23:39

자바 백준 28014번

브론즈 3

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

 

28014번: 첨탑 밀어서 부수기

첫째 줄에 첨탑의 개수 $N$이 주어진다. $(1\leq N\leq 5\,000\,000)$ 둘째 줄에는 앞에서부터 차례대로 첨탑의 높이 $H_1, H_2, \cdots, H_n (1\leq H_i\leq 1\,000\,000)$ 이 주어진다. 입력으로 주어지는 모든 수는 정

www.acmicpc.net

 

 

 

 

 

문제 보기

분류: 그리디 알고리즘

 

 

 

 

 

문제 풀기

모든 첨탑의 높이를 StringTokenizer와 BufferdReader를 이용하여 array에 입력받는다.

index = 1 부터 시작하여 이전 index의 value가 현재 index의 value보다 작거나 같으면 카운트를 올린다. 이때, 첫 한 번은 무조건 넘겨야 하기 때문에 count 초기값은 1로 시작한다.

 

 

 

 

 

코드 보기

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

public class Main {
    
    public static void main(String[] args) throws IOException {
        // BufferedReader를 사용하여 입력을 받을 수 있도록 설정
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        
        // 숫자의 개수 N을 입력 받음
        int N = Integer.parseInt(br.readLine());
        
        // 첨탑의 높이를 저장할 배열 heights 선언
        int[] heights = new int[N];
        // 두 번째 줄에서 공백으로 구분된 숫자들을 읽어서 배열에 저장
        StringTokenizer st = new StringTokenizer(br.readLine());
        for (int i = 0; i < N; i++) {
            heights[i] = Integer.parseInt(st.nextToken());
        }
        
        // 첨탑의 높이를 비교하면서 앞의 수가 뒤의 수보다 작거나 같은 경우 카운트를 증가
        int count = 1;  // 초기 카운트를 1로 설정하여 첫 번째 첨탑은 항상 포함
        for (int i = 1; i < N; i++) {
            if (heights[i - 1] <= heights[i]) {
                count++;
            }
        }
        
        // 결과를 출력
        System.out.println(count);
    }
    
}