반응형
문제
도시에는 N개의 빌딩이 있다.
빌딩 관리인들은 매우 성실 하기 때문에, 다른 빌딩의 옥상 정원을 벤치마킹 하고 싶어한다.
i번째 빌딩의 키가 hi이고, 모든 빌딩은 일렬로 서 있고 오른쪽으로만 볼 수 있다.
i번째 빌딩 관리인이 볼 수 있는 다른 빌딩의 옥상 정원은 i+1, i+2, .... , N이다.
그런데 자신이 위치한 빌딩보다 높거나 같은 빌딩이 있으면 그 다음에 있는 모든 빌딩의 옥상은 보지 못한다.
예) N=6, H = {10, 3, 7, 4, 12, 2}인 경우
=
= =
= - =
= = = -> 관리인이 보는 방향
= - = = =
= = = = = =
10 3 7 4 12 2 -> 빌딩의 높이
[1][2][3][4][5][6] -> 빌딩의 번호
- 1번 관리인은 2, 3, 4번 빌딩의 옥상을 확인할 수 있다.
- 2번 관리인은 다른 빌딩의 옥상을 확인할 수 없다.
- 3번 관리인은 4번 빌딩의 옥상을 확인할 수 있다.
- 4번 관리인은 다른 빌딩의 옥상을 확인할 수 없다.
- 5번 관리인은 6번 빌딩의 옥상을 확인할 수 있다.
- 6번 관리인은 마지막이므로 다른 빌딩의 옥상을 확인할 수 없다.
따라서, 관리인들이 옥상정원을 확인할 수 있는 총 수는 3 + 0 + 1 + 0 + 1 + 0 = 5이다.
입력
- 첫 번째 줄에 빌딩의 개수 N이 입력된다.(1 ≤ N ≤ 80,000)
- 두 번째 줄 부터 N+1번째 줄까지 각 빌딩의 높이가 hi 입력된다. (1 ≤ hi ≤ 1,000,000,000)
출력
- 각 관리인들이 벤치마킹이 가능한 빌딩의 수의 합을 출력한다.
예제 입력 1
6
10
3
7
4
12
2
예제 출력 1
5
소스코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
import java.util.StringTokenizer;
public class Main {
private static BufferedReader bf;
private static StringTokenizer st;
private static int N;
private static long result=0;
private static int []H;
private static Stack<Integer> stack=new Stack<>();
public static void main(String[] args) throws NumberFormatException, IOException {
bf=new BufferedReader(new InputStreamReader(System.in));
N=Integer.parseInt(bf.readLine());
H=new int[N];
for(int i=0;i<N;i++) {
H[i]=Integer.parseInt(bf.readLine());
}
for(int i=0;i<N;i++) { // 가장 왼쪽에 있는 건물부터 탐색 시작
int h=H[i];
while(!stack.isEmpty()) { // 스택에 값이 들어있는 경우
int top=stack.pop(); // 스택의 top을 하나 pop 함
if(top>h) { // 스택의 top 값이 현재 건물 높이보다 크면 현재 건물을 볼 수 있으므로 스택에 다시 push 함
stack.push(top);
break;
}
}
result+=stack.size(); // 현재 스택에 남아있는 값의 개수가 현재 건물을 볼 수 있는 건물의 수와 같으므로 result에 더해줌
stack.push(h);
}
System.out.println(result);
}
}
반응형
'코딩테스트 > 기타' 카테고리의 다른 글
[Java] 백준 15652번 : N과 M (4) (0) | 2022.03.21 |
---|---|
[Java] 백준 5397번 : 키로거 (0) | 2022.03.17 |
[Java] 백준 1406번 : 에디터 (0) | 2022.03.11 |
[Java] 백준 1021번 : 회전하는 큐 (0) | 2022.03.10 |
[Java] 백준 1107번 : 리모컨 (0) | 2022.03.09 |