백준 - 6198번 옥상 정원 꾸미기
2024. 3. 9. 01:30ㆍ코딩테스트 정리(자바)
728x90
반복문을 두번 쓰면 O(n^2)이라 계속 시간초과가 발생함.
한번만 쓰는 방법이 뭐가 있을까 고민했지만 찾지 못함...
아이디어
: 스택에 저장된 빌딩들의 높이가 다음 빌딩의 높이 height보다 낮다면 스택에서 pop.
height 이후의 다음 빌딩을 볼 수 없기 때문.
높은 애들만 스택에 저장.
스택의 저장되어 있는 애들의 개수를 계속 더한다.
또 하나 중요한 점은,
sum의 타입은 long으로 선언해야 함.
최악의 경우에 거의 n^2개가 나올 수 있기 때문.
그럼 64억으로 int 타입인 21억을 벗어난다.
import java.io.*;
import java.util.*;
class Main{
public static void main(String[] args) throws IOException{
BufferedReader br=new BufferedReader(
new InputStreamReader(System.in));
BufferedWriter bw=new BufferedWriter(
new OutputStreamWriter(System.out));
int N=Integer.parseInt(br.readLine());
Stack <Integer> stack =new Stack <>();
long sum=0;
for(int i=0;i<N;i++){
int height=Integer.parseInt(br.readLine());
while(!stack.isEmpty()){
if(stack.peek()<=height)
stack.pop();
else
break;
}
sum+=stack.size();
stack.push(height);
}
bw.write(Long.toString(sum));
bw.flush();
bw.close();
}
}
728x90
'코딩테스트 정리(자바)' 카테고리의 다른 글
| 백준 - 1021번 회전하는 큐 (실버 3) (2) | 2024.03.12 |
|---|---|
| 백준 - 큐2 (18258번) 실버 4 (0) | 2024.03.11 |
| 백준 - 6198번 옥상 정원 꾸미기 (골드 5) (1) | 2024.03.08 |
| 백준 - 2493번 탑 (골드 5) (0) | 2024.03.07 |
| 백준 - 스택 수열 (실버 2) (0) | 2024.03.06 |