코딩테스트
백준 스카이라인(1863번)
코드 죄수
2022. 8. 30. 00:12
알고리즘
높이가 0인 건물이 들어온다면 스택을 초기화 함
현재 건물보다 낮은 건물이 들어온다면 입력받은 건물의 높이보다 큰 건물을 pop함
현재 건물보다 높이가 크다면 카운트 증가함
건물의 높이가 같다면 continue로 입력받은 건물을 스택에 넣지 않음
스택이 비어있다면 카운트 증가
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int num = Integer.parseInt(br.readLine());
Stack<Integer> s = new Stack<Integer>();
StringTokenizer st;
int number,height;
int count=0;
for (int i =1; i<= num; i++) {
st = new StringTokenizer(br.readLine());
number = Integer.parseInt(st.nextToken());
height = Integer.parseInt(st.nextToken());
if(height == 0) { // 건물의 높이가 0이라면
s.clear(); // 스택 초기화
}else { // 건물의 높이가 0이 아니라면
while(!s.empty() && s.peek()>height) { // 현재 건물보다 입력 받은 건물이 낮을시
s.pop(); //입력 받은 건물 보다 큰 건물 제외
}
if(!s.empty() &&s.peek()<height) { // 현재 건물보다 입력받은 건물이 높을시
count++; // 카운트 증가
}
if(!s.empty() &&s.peek() == height) { // 건물의 높이가 같을시
continue; //높이가 같다면 같은 건물 취급으로 스택에 넣지 않음
}
if(s.empty()) { // 스택이 비어있다면
count++; //카운트 증가
}
s.push(height); //건물의 높이를 스택에 넣기
}
}
System.out.println(count); //총 건물의 카운트 출력
}
}