https://www.acmicpc.net/problem/1863
1. 주어진 입력에서 y와 높이가 같은 건물은 최소 1개 존재해야 한다.
2. 최소 1개는 존재해야 하는 건물이 최대한 넓은 범위를 커버해야, 최소의 갯수를 찾을 수 있다.
3. 고도가 변하는 지점들을 모두 체크하면서, Stack 자료구조를 이용한다.
* 고도가 같다면 그대로 가면되고, 고도가 낮다면 건물의 개수가 추가되어야 한다.
해설코드(Java).
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
import java.util.*;
import java.lang.*;
import java.io.*;
class Main
{
static Scanner sc;
static int N, x, y;
static Vector<Integer> v;
static int answer = 0;
public static void main (String[] args) throws java.lang.Exception
{
sc = new Scanner(System.in);
N = sc.nextInt();
int[] arr = new int[50002];
for(int i = 0; i < N; i++){
x = sc.nextInt();
y = sc.nextInt();
arr[i] = y;
}
Stack<Integer> stk = new Stack<Integer>();
for(int i = 0; i <= N; i++){
while(!stk.empty() && stk.peek() > arr[i]){
answer += 1;
stk.pop();
}
if(!stk.empty() && stk.peek() == arr[i])
continue;
stk.push(arr[i]);
}
System.out.println(answer);
}
}
|
'알고리즘 > 백준' 카테고리의 다른 글
[BOJ 2616] 소형기관차(Java, Dynamic Programming, 동적계획법, Bottom-up, Top-down 풀이) (0) | 2020.08.16 |
---|---|
[BOJ 1933] 스카이라인(Java, Treemap, 설명, 간단한 코드) (0) | 2020.08.12 |
[BOJ 10799] 쇠막대기(Java, Replace, 직관적인 풀이) (0) | 2020.08.11 |
[BOJ 3671] 산업 스파이의 편지(Java, 소수 구하기, DFS) (0) | 2020.08.08 |
[BOJ 2981] 검문(Java, 유클리드 호제법, Set) (0) | 2020.08.08 |