백준
백준 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); //보이는 개수 출력
}
}