이 영역을 누르면 첫 페이지로 이동
자라자 블로그의 첫 페이지로 이동

자라자

페이지 맨 위로 올라가기

자라자

개발자를 준비하는 자라자의 블로그입니다.

백준 2493 탑 c++

  • 2022.01.08 19:22
  • PS/BOJ

백준로고

[문제 링크]

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

[입출력 예]

입력 출력
5
6 9 5 7 4
0 0 2 2 4

[1차시도 - 시간초과 57%]

#include <bits/stdc++.h>
#define MAX_N 500001

using namespace std;

int a[MAX_N];
int ans[MAX_N];
int recent_max = -1;

int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    int n;
    cin>>n;

    for(int i=0; i<n; i++){
        cin>>a[i];
        if (recent_max>0 && a[i]>recent_max){
            cout<<0<<" ";
            recent_max=a[i];
            continue;
        }
        int temp=i-1;
        while(true){
            if (temp==-1) break;
            if (a[temp]>recent_max){
                recent_max=a[temp];
            }
            if (a[temp]>=a[i]){
                break;
            }
             temp--;

        }

        cout<<temp+1<<" ";
    }

    return 0;
}

[소스코드]

#include <bits/stdc++.h>
using namespace std;
#define X first
#define Y second

int N;
stack<pair<int,int>> tower;

int main(){
  ios_base::sync_with_stdio(0);
  cin.tie(0);

  cin>>N;
  // 첫 값으로 최대값을 넣음.
  tower.push({100000001,0});
  for (int i= 1; i<=N; i++){
    int height;
    cin>>height;
    // 현재 height보다 높은 top이 나올 때까지 제거
    while (tower.top().X <height)
      tower.pop();
      cout<< tower.top().Y<<" ";
      tower.push({height,i});
  }
}

// 스택 문제의 본질은..?
// top부터 하나씩 파서 과거의 데이터를 조회해야하는데,
// 스택에는 꼭 필요한 정보만 있어야함. 꼭 필요한 정보가 아니면
// 시간복잡도를 위해서 아예 스택에 보관하지 않는 게 낫다.
// 이 문제는 0번인덱스부터 내림차순으로 요소들이 쌓이게 된다.

[출처]

https://github.com/encrypted-def/basic-algo-lecture/blob/master/0x05/solutions/1874.cpp

'PS > BOJ' 카테고리의 다른 글

백준 6918 옥상 정원 꾸미기 c++  (0) 2022.01.13
백준 1874 스택수열 c++  (0) 2022.01.08
백준 5397 키로거 c++  (0) 2022.01.04
백준 2003 수들의 합 2 (c++)  (0) 2022.01.04
백준 3425 - 고스택 파이썬 풀이  (0) 2021.12.08

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • 백준 6918 옥상 정원 꾸미기 c++

    백준 6918 옥상 정원 꾸미기 c++

    2022.01.13
  • 백준 1874 스택수열 c++

    백준 1874 스택수열 c++

    2022.01.08
  • 백준 5397 키로거 c++

    백준 5397 키로거 c++

    2022.01.04
  • 백준 2003 수들의 합 2 (c++)

    백준 2003 수들의 합 2 (c++)

    2022.01.04
다른 글 더 둘러보기

정보

자라자 블로그의 첫 페이지로 이동

자라자

  • 자라자의 첫 페이지로 이동

검색

메뉴

  • 🏠 HOME
  • 💡 ABOUT
  • 💻 GITHUB

카테고리

  • 분류 전체보기 (91)
    • Tech Note (3)
    • Dev Log (11)
    • Study Log (11)
    • Settings (3)
    • PS (53)
      • Programmers (21)
      • BOJ (32)
    • Diary (10)

최근 글

인기 글

댓글

공지사항

아카이브

태그

  • 공식문서읽기
  • 리액트
  • ㅣ

나의 외부 링크

정보

자라자의 자라자

자라자

자라자

블로그 구독하기

  • 구독하기
  • RSS 피드

방문자

  • 전체 방문자
  • 오늘
  • 어제

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. © 자라자. Designed by Fraccino.

티스토리툴바