🥹

아좌잣 홧팅이닷!

토독토독..💻

알고리즘🤮/백준

[JAVA] 백준 17608번: 막대기

SU_VIN 2022. 11. 28. 18:52
반응형

 

 

17608번: 막대기

아래 그림처럼 높이만 다르고 (같은 높이의 막대기가 있을 수 있음) 모양이 같은 막대기를 일렬로 세운 후, 왼쪽부터 차례로 번호를 붙인다. 각 막대기의 높이는 그림에서 보인 것처럼 순서대로

www.acmicpc.net

문제

아래 그림처럼 높이만 다르고 (같은 높이의 막대기가 있을 수 있음) 모양이 같은 막대기를 일렬로 세운 후, 왼쪽부터 차례로 번호를 붙인다. 각 막대기의 높이는 그림에서 보인 것처럼 순서대로 6, 9, 7, 6, 4, 6이다. 일렬로 세워진 막대기를 오른쪽에서 보면 보이는 막대기가 있고 보이지 않는 막대기가 있다. 즉, 지금 보이는 막대기보다 뒤에 있고 높이가 높은 것이 보이게 된다. 예를 들어, 그림과 같은 경우엔 3개(6번, 3번, 2번)의 막대기가 보인다.

N개의 막대기에 대한 높이 정보가 주어질 때, 오른쪽에서 보아서 몇 개가 보이는지를 알아내는 프로그램을 작성하려고 한다.

입력

첫 번째 줄에는 막대기의 개수를 나타내는 정수 N (2 ≤ N ≤ 100,000)이 주어지고 이어지는 N줄 각각에는 막대기의 높이를 나타내는 정수 h(1 ≤ h ≤ 100,000)가 주어진다.

출력

오른쪽에서 N개의 막대기를 보았을 때, 보이는 막대기의 개수를 출력한다.


처음에 배열로 접근했다가 빙빙 돌았던 문제.. 처음 값은 배열에 넣어주는건 맞지만

그다음은 스택을 통해 해결해야한다! 그리고 다른 포인트는 배열의 끝에서부터 스택에 넣어주는 것! (보는 방향이 끝에서부터라..)

 


문제풀이

import java.util.Scanner;
import java.util.Stack;

public class BJ_CT_5 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt(); // 막대기 개수
        int[] arr= new int[n]; // 막대기의 높이를 담을 배열
        Stack<Integer> st = new Stack<Integer>(); //스택을 사용해 비교할것임
        int count =0;

        for(int i=0;i<n;i++){ //우선 배열에 막대기 높이를 다 담아줌
            arr[i]=sc.nextInt();
        }
        for(int i=arr.length-1;i>=0;i--){ //배열의 끝에서 부터
            if(i==arr.length-1) { //첫번째 요소는 무조건 보이기때문에 count 증가시켜주고 스택에 푸시
                count++;
                st.push(arr[arr.length-1]); 
            }

            if(arr[i]>st.peek()){ //그다음 요소들 부턴 스택의 최상위 값보다 큰 배열의 값만 푸시 그래야 보이는 것들이니깐
                count++;
                st.push(arr[i]);
            }
        }


        System.out.println(count);
    }
}

난 애초에 스택 최상위 값보다 작은 수들은 push하지도 않아서 pop이 필요 없지만 뭐 대충 이해를 위해 pop이라 표현을 해봤다!

포인트는 stack의 peek보다 큰 값만 보인다는 점!

아좌잣!  통과! 

 

반응형

'알고리즘🤮 > 백준' 카테고리의 다른 글

[JAVA] 백준 1026번: 보물  (0) 2022.11.30
[JAVA] 백준 1789번: 수들의 합  (0) 2022.11.30
[JAVA] 백준 8958번: OX퀴즈  (0) 2022.11.24
[JAVA] 백준 1075번: 나누기  (0) 2022.11.24
[JAVA] 백준 2476번: 주사위 게임  (0) 2022.11.24