본문 바로가기
알고리즘/백준

백준 1863. 스카이라인 쉬운거

by kastori 2021. 12. 24.
반응형

문제

 

1863번: 스카이라인 쉬운거

첫째 줄에 n이 주어진다. (1 ≤ n ≤ 50,000) 다음 n개의 줄에는 왼쪽부터 스카이라인을 보아 갈 때 스카이라인의 고도가 바뀌는 지점의 좌표 x와 y가 주어진다. (1 ≤ x ≤ 1,000,000. 0 ≤ y ≤ 500,000) 첫

www.acmicpc.net

문제풀이

 배열을 사용해서 풀려고 했었는데, 차례대로 넣으면서 높이(y좌표)가 달라질 때 처리를 하면 되겠다고 생각을 해서 스택을 사용하였습니다. 높이가 점점 증가하다가 갑자기 감소했을 때, while을 돌면서 stack의 가장 위쪽에 위치한 높이가 현재 높이보다 같거나 작아질 때까지 pop 한다.
 
 마지막 스택에 남아있는 높이들을 pop 하면서 높이가 0이 아니면 건물의 수를 더해 준다.

소스코드(Java)

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Stack;
import java.util.StringTokenizer;

/**
 * 스카이라인 쉬운거
 * https://www.acmicpc.net/problem/1863
 */
public class baek1863 {
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;

        int N = Integer.parseInt(br.readLine());
        int answer = 0;
        Stack<Integer> stack = new Stack<>();

        for (int i = 0; i < N; i++) {
            st = new StringTokenizer(br.readLine());

            int x = Integer.parseInt(st.nextToken());
            int y = Integer.parseInt(st.nextToken());

            while (!stack.isEmpty() && stack.peek() > y) {
                answer++;
                stack.pop();
            }
            if (!stack.isEmpty() && stack.peek() == y) {
                continue;
            }
            stack.push(y);
        }

        while (!stack.isEmpty()) {
            if (stack.peek() > 0) {
                answer++;
            }
            stack.pop();
        }
        System.out.println(answer);
    }
}

 

 

baek/baek1863.java · master · kastori / algo

GitLab.com

gitlab.com

 

반응형

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

[파이썬][백준21318] 피아노 체조  (0) 2022.01.13
백준 14674. 영우는 사기꾼?  (0) 2021.12.25
백준 18116. 로봇 조립  (0) 2021.12.23
백준 1992. 쿼드트리  (0) 2021.12.22
백준 16562. 친구비  (0) 2021.12.21

댓글