[Algorithm] 백준 - 17299번 오등큰수 (Swift)

2024. 4. 13. 15:53· → Problems
목차
  1. 문제 소개
  2. 문제 풀이

문제 소개

17299번: 오등큰수

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

www.acmicpc.net

Ai가 수열 A에서 등장한 횟수를 F(Ai)라고 했을 때, Ai의 오등큰수는 오른쪽에 있으면서 수열 A에서 등장한 횟수가 F(Ai)보다 큰 수 중에서 가장 왼쪽에 있는 수를 의미한다. 그러한 수가 없는 경우에 오등큰수는 -1이다. 설명하기가 좀 복잡해서 아래 문제 캡처를 첨부한다.

 

문제 풀이

처음 등장한 횟수를 어떻게 저장할까 고민했는데, 가장 효율적으로 접근이 가능한 데이터 구조는 딕셔너리 구조라고 생각했다. 따라서 아래와 같이 딕셔너리에 반복되는 횟수를 저장해 줬다.

let n = Int(readLine()!)!
var nums = readLine()!.split(separator: " ").map { Int(String($0))! }

var count = [Int: Int]()

for num in nums {
    if count[num] == nil {
        count[num] = 1
    } else {
        count[num]! += 1
    }
}

 
그리고 어떻게 이 값을 비교할 수 있을까? 바로 스택을 사용하면 된다. index를 stack에 쌓고, 쌓인 index를 문제조건에 따라 추출 할 수 있게 했다.

import Foundation

let n = Int(readLine()!)!
var nums = readLine()!.split(separator: " ").map { Int(String($0))! }

var count = [Int: Int]()
var stack = [Int]()

for num in nums {
    if count[num] == nil {
        count[num] = 1
    } else {
        count[num]! += 1
    }
}

for i in 0..<n {
    while !stack.isEmpty && count[nums[stack.last!]]! < count[nums[i]]! {
        nums[stack.removeLast()] = nums[i]
    }
    
    stack.append(i)
}

for i in stack {
    nums[i] = -1
}

print(nums.map { String($0) }.joined(separator: " "))

'→ Problems' 카테고리의 다른 글

[Algorithm] 백준 - 1929번 소수구하기 (Swift) (에라토스테네스의 체)  (1) 2024.04.14
[Algorithm] 백준 - 1918번 후위표기식 (postfix)  (0) 2024.04.14
[Algorithm] 백준 - 10799번 쇠막대기 (Swift) (텍스트 대치)  (0) 2024.04.13
[Algorithm] 프로그래머스 - 디펜스 게임 (Swift) (Heap, Parametric Search)  (0) 2024.04.05
[Algorithm] 프로그래머스 - 시소 짝궁 (Swift)  (0) 2024.04.04
  1. 문제 소개
  2. 문제 풀이
'→ Problems' 카테고리의 다른 글
  • [Algorithm] 백준 - 1929번 소수구하기 (Swift) (에라토스테네스의 체)
  • [Algorithm] 백준 - 1918번 후위표기식 (postfix)
  • [Algorithm] 백준 - 10799번 쇠막대기 (Swift) (텍스트 대치)
  • [Algorithm] 프로그래머스 - 디펜스 게임 (Swift) (Heap, Parametric Search)
Swift librarian
Swift librarian
Swift librarian
Swift Library
Swift librarian
전체
오늘
어제
  • 분류 전체보기 (231)
    • 📺 Programming (5)
    • → Architecture (2)
    • → Design Pattern (0)
    • → Computer Science (15)
    • ⚙️ Algorithm (0)
    • → 알고리즘 관련 (22)
    • → Problems (104)
    • 🚀 Project (0)
    • → 알쏭달쏭 (0)
    • → Shook (2)
    • → Solver (8)
    • → Taster (7)
    • → Outline (4)
    • → Pointer (2)
    • → Guesser (3)
    • 🦜 Swift (2)
    • → Swift Archive (12)
    • → Swift Study (12)
    • → Xcode (6)
    • 🧰 Framework (0)
    • → Foundation (1)
    • → UIKit (2)
    • → SwiftUI (3)
    • → CoreData (2)
    • → MapKit (1)
    • → CoreHaptic (1)
    • → User Notification (1)
    • → StoreKit (2)
    • 🏛️ Library (0)
    • → TCA (0)
    • 🐈‍⬛ Git (8)
    • → Git의 원리 (2)
    • → Git 심화 (1)
    • 📦 Other (1)
    • 👦🏻 Log (0)

최근 글

hELLO · Designed By 정상우.v4.2.2
Swift librarian
[Algorithm] 백준 - 17299번 오등큰수 (Swift)
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.