https://www.acmicpc.net/problem/2493

 

2493번: 탑

첫째 줄에 탑의 수를 나타내는 정수 N이 주어진다. N은 1 이상 500,000 이하이다. 둘째 줄에는 N개의 탑들의 높이가 직선상에 놓인 순서대로 하나의 빈칸을 사이에 두고 주어진다. 탑들의 높이는 1 이상 100,000,000 이하의 정수이다.

www.acmicpc.net

 

처음에는 시간초과가 3번 정도 났나...

 

문제 파악은  별게 없는 것 같습니다.

 

그리고 레이저는 입력방향의 반대 방향으로 쏘기 때문에 입력을 받으면서

 

지금 들어와있는 입력 값들만 보면 됩니다.

 

처음에는 그 건물로 부터 이전에 들어온 값들을 보면서 크기를 비교 했는데 시간초과

 

최악의 경우 시간을 훨씬 뛰어 넘기 떄문이겠죠

 

그래서 비교의 수를 줄이기 위해 어떻게 할까 하다가

 

만약 1번 건물의 높이가 4이고 2번에 들어온 건물의 높이가 8이면 그 이후 건물들은 1번 건물은 볼필요도 없습니다.

 

즉 약간 높은건물에 가려서 보이지 않는 다는 느낌을 떠올린다면 스택을 이용하여 풀수 있습니다.

 

새로운 높은 건물이 들어 온다면 그 이전의 건물들은 모두 스택에서 빼버리는 거죠

 

숫자가 작을때는 별로 차이가 안나겠지만 숫자가 엄청 커질경우 시간차이가 상당 할 것으로 보입니다.

 

-첫번째 시간초과 났던 소스 입니다.-

 

 

-스택을 이용하여 시간초과를 해결한 코드 입니다.-

 

 

 

'알고리즘 문제풀이 > 스택' 카테고리의 다른 글

백준 1406 [C++]  (0) 2021.01.09
백준 10799 [C++]  (0) 2021.01.09
백준 1874 [C++]  (0) 2021.01.09
백준 3986  (0) 2020.03.02

+ Recent posts