입력으로 막대기 전체 숫자와 막대기 길이들을 받은 뒤, 오른쪽에서 볼 경우 보이는 막대기의 수를 세서 출력해주면 되는 문제인데 주의할 점은 맨 끝이 6이라면 8을 볼 수 있지만 이후부터는 8 미만의 값은 가려져서 보이지 않기 때문에 볼 수 있는 값이 계속 높아진다는 것을 꼭 기억해야 한다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int count = Integer.parseInt(br.readLine());
Stack<Integer> stack = new Stack<>();
for (int i = 0; i < count; i++) {
stack.push(Integer.parseInt(br.readLine()));
}
int minVal = stack.pop();
int ans = 1;
while (!stack.empty()) {
int temp = stack.pop();
if (minVal < temp) {
minVal = temp;
ans++;
}
}
System.out.println(ans);
}
}
문제를 풀어보자면 삽입의 역순으로 진행해야 하고, 볼 수 있는 값이 계속 변하기 때문에 Stack을 사용해주면 적절히 문제를 풀 수 있는데 일단 stack에 모든 값을 담아준 후
스택에 있는 값을 차례로 뽑되 첫 번째 값은 무조건 볼 수 있으므로 횟수를 더해주고 이후부터는 첫 번째 값 보다 큰 값이 있으면 횟수를 더하면서 볼 수 있는 값을 변경해줘야 한다. 6에서 7을 볼 수는 있지만 이후에는 8부터 볼 수 있기 때문에 stack 뽑으면서 볼 수 있는 숫자 계속 바꿔주면서 본 횟수를 모두 더해준 후 스택을 다 뽑고 나서 해당 횟수를 출력해주면 끝이다.
Leave a Reply