Notice
Recent Posts
Recent Comments
Link
개발 무지렁이
[문제풀이] B17608 막대기 본문
막대기
🪅 가장 늦게 들어온 데이터부터 검사하는 데이터의 흐름을 보고 스택을 생각해낼 수 있느냐
🪅 조건을 만족하는 데이터가 나왔을 때, 기준을 변경해야하는 것을 잊지 않았느냐
🪅 스택 관련 라이브러리를 사용할 줄 아느냐
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
/**
* 백준 17608번 막대기
*
* 입력:
* 첫 번째 줄에는 막대기의 개수를 나타내는 정수 N (2 ≤ N ≤ 100,000)이 주어지고 이어지는 N줄 각각에는 막대기의 높이를 나타내는 정수 h(1 ≤ h ≤ 100,000)가 주어진다.
*
* 출력:
* 오른쪽에서 N개의 막대기를 보았을 때, 보이는 막대기의 개수를 출력한다.
*
*/
public class Main {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
Stack<Integer> stack = new Stack<>();
// stack에 입력받은 값 push
for(int i = 0; i < N; i++) {
int element = Integer.parseInt(br.readLine());
stack.push(element);
}
int viewCnt = 1;
// 맨위의 기준이 되는 높이 pop
int standard = stack.pop();
while(!stack.isEmpty()) {
int cur = stack.pop();
if(cur > standard) {
standard = cur;
viewCnt++;
}
}
System.out.println(viewCnt);
}
}
💡 문제 접근 과정
: 늦게 들어간 데이터부터 높이를 조사해야되므로, 나중에 들어간 데이터를 먼저 빼내는 '스택 자료구조'를 생각했다.
즉, 스택에서 pop하면서 조건을 검사해주면 되겠다는 생각을 했다.
'코딩 테스트 > 문제풀이' 카테고리의 다른 글
[문제풀이] B2164 카드2 (1) | 2023.03.19 |
---|---|
[문제풀이] B1874 스택수열 (0) | 2023.03.19 |
[문제풀이] B1158 요세푸스 문제 (0) | 2023.03.13 |
[문제풀이] B11660 구간 합 구하기 5 (0) | 2023.03.13 |
[문제풀이] B11659 구간합구하기4 (0) | 2023.03.12 |
Comments