[백준] 17299 - 오등큰수 (G3)

2023. 7. 4. 20:47·알고리즘 (PS)/BOJ
반응형

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

 

17299번: 오등큰수

첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째에 수열 A의 원소 A1, A2, ..., AN (1 ≤ Ai ≤ 1,000,000)이 주어진다.

www.acmicpc.net

난이도가 조금 있는 스택문제

알고리즘 분류가 스택이라는 것만 알아내면

아이디어가 어렵다기 보다는 구현이 조금 복잡하다고 생각한다.

 

오등큰수를 결정하는 제일 큰 기준은 '숫자의 등장 횟수' 이다.

따라서 숫자의 등장횟수를 미리 다 저장해둔다.

 

주어진 수열의 왼쪽부터 차례대로 순회하면서 해당 숫자의 등장 횟수를 스택에 저장해나가다

스택의 가장 위에 있는 수의 등장횟수보다 더 많은 등장횟수를 가진  수가 나타나면

그 수가 오등큰수에서 말하는 '등장횟수가 자기보다 더 큰 수 중 수열의 가장 왼쪽에 있는 수' 이다.

 

이제 스택의 가장 위에 있는 수의 등장횟수가 현재 방문한 수의 등장 횟수보다 작은 동안 반복해서 스택 원소를 pop 하고,

정답 배열에서 pop한 숫자가 있던 인덱스 위치의 값을 현재 방문한 수로 만들면 된다.

그리고 다시 위 과정을 반복한다.

 

정답 배열 같은 경우는 미리 -1로 전부 초기화를 해둔다.

이렇게 해두면 위 과정을 다 반복하고 스택에 남아있는 값들에 대해서는

정답배열에서 따로 조치를 할 필요가 없게 된다.

이 값들이 스택에 남아있다는 것은 이 값이 주어진 수열에서 등장횟수가 가장 큰 값이라 오등큰수가 없기 때문이다.

 

n = int(input())
count = {}
l = list(map(int, input().split()))
for i in range(n):
    v = l[i]
    try:
        count[v] += 1
    except:
        count[v] = 1
ans = [-1 for _ in range(n)]
stack = []

for i in range(n):
    v = l[i]
    while stack and stack[-1][0] < count[v]:
        pop_count, pop_value, pop_idx = stack.pop()
        ans[pop_idx] = v
    stack.append((count[v], l[i], i))

print(*ans)

 

 

 

반응형
저작자표시 비영리 변경금지 (새창열림)

'알고리즘 (PS) > BOJ' 카테고리의 다른 글

[백준] 28457 - Every? Only One's Marble (G1)  (0) 2023.08.27
[백준] 3015 - 오아시스 재결합 (P5)  (0) 2023.07.04
[백준] 2485 - 가로수 (S4)  (0) 2023.07.04
[백준] 1796 - 신기한 키보드 (G4)  (0) 2022.08.27
[백준] 2098 - 외판원 순회 (G1)  (0) 2022.08.21
'알고리즘 (PS)/BOJ' 카테고리의 다른 글
  • [백준] 28457 - Every? Only One's Marble (G1)
  • [백준] 3015 - 오아시스 재결합 (P5)
  • [백준] 2485 - 가로수 (S4)
  • [백준] 1796 - 신기한 키보드 (G4)
에버듀
에버듀
개발은 좋은데 뭘로 개발할까
  • 에버듀
    Blog. 에버듀
    에버듀
  • 전체
    오늘
    어제
    • 분류 전체보기 (614)
      • 개인 프로젝트 (43)
        • 토이 프로젝트 (3)
        • [2020] 카카오톡 봇 (9)
        • [2021] 코드악보 공유APP (22)
        • [2022] 유튜브 뮤직 클론코딩 (9)
        • [2025] 한글 SQL 데이터베이스 (0)
      • 팀 프로젝트 (22)
        • [2020] 인공지능 숫자야구 (4)
        • [2022] OSAM 온라인 해커톤 (10)
        • [2024] GDSC 프로젝트 트랙 (6)
        • [2025] 큰소리 웹 페이지 (2)
      • CS (335)
        • 자료구조 (19)
        • 어셈블리 (41)
        • 멀티미디어응용수학 (7)
        • 컴퓨터 구조 (29)
        • 알고리즘 분석 (4)
        • 컴퓨터 네트워크 (38)
        • 프로그래밍언어론 (15)
        • HCI 윈도우즈프로그래밍 (26)
        • 기초데이터베이스 (29)
        • 운영체제 (23)
        • 오토마타 (24)
        • 문제해결기법 (11)
        • 블록체인 (22)
        • 소프트웨어공학 (21)
        • 기계학습심화 (12)
        • 컴퓨터그래픽스와 메타버스 (8)
        • 분산시스템특론 (6)
      • 자기계발 (44)
        • 생각 정리 (22)
        • 대외활동 (11)
        • 동아리 (7)
        • 자격증 (3)
        • 머니 스터디 (1)
      • 알고리즘 (PS) (107)
        • BOJ (101)
        • Programmers (5)
        • 알고리즘 이모저모 (1)
      • WEB(BE) (8)
        • express.js (1)
        • Spring & Spring Boot (7)
      • WEB(FE) (2)
        • html, css, js (1)
        • React.js (1)
      • Tool & Language (6)
        • Edit Plus (1)
        • Git (1)
        • Python3 (2)
        • Java (2)
      • Infra (12)
        • AWS (1)
        • Oracle Cloud (8)
        • Firebase (2)
        • Network (1)
      • Android (18)
        • Java (6)
        • Flutter (12)
      • Window (2)
        • Visual Studio 없이 WPF (1)
        • MFC (1)
      • 독서 (14)
        • Inside Javascript (7)
        • Database Internals (6)
        • 한 글 후기 (1)
  • 링크

    • github
    • website
  • 인기 글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
에버듀
[백준] 17299 - 오등큰수 (G3)
상단으로

티스토리툴바