백준

백준 17608 막대기(Java)

Park DJ 2023. 1. 12. 23:18

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

 

17608번: 막대기

아래 그림처럼 높이만 다르고 (같은 높이의 막대기가 있을 수 있음) 모양이 같은 막대기를 일렬로 세운 후, 왼쪽부터 차례로 번호를 붙인다. 각 막대기의 높이는 그림에서 보인 것처럼 순서대로

www.acmicpc.net


 

해석 및 팁

 


항상 끝에 있는 막대기는 보인다는 점을 활용해서 막대기의 길이를 배열에 넣어준 후 뒤에서부터 for문으로 돌면 된다. 
예를들어 가장 끝에있는것보다. 한 칸 앞의 막대기의 길이가 길면 앞 막대기의 길이를 최댓값으로 바꿔주고 개수를 더해주는 것을 반복하면 보이는 막대기의 개수를 알 수 있다 .

 

 


 

Java 코드

 


import java.util.Scanner;

public class Main {
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
  
    int n = sc.nextInt();
    int[] arr = new int[n];
    int count = 1;                             //가장 끝은 항상 보인다

    for(int i = 0; i < n; i++) {
      arr[i] = sc.nextInt();
    }
    
    int max = arr[n-1];                       //가장끝에있는 막대기의 길이
    
    for(int i = n-2; i >=0; i--) {      //끝에서부터 비교하면서 앞에가 크면 max값 변경및 count++
      if(max < arr[i]) {
        max = arr[i];
        count++;
      }
    }
    System.out.println(count);          //보이는 개수 출력
  }  
}