티스토리 뷰

 

17299번: 오등큰수

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

www.acmicpc.net


문제 요약

  • 이전의 오큰수 문제에서 숫자의 크기를 숫자가 등장한 횟수로 바꾼 문제이다.

풀이

  • 숫자의 횟수를 저장하는 F배열을 만들어주었다. 나머지는 앞의 문제와 동일
import Foundation

let N = Int(readLine()!)!
var A = readLine()!.split(separator: " ").map { Int($0)! }
var F: [Int] = Array(repeating: 0, count: 1000000)
var stack: [Int] = []
var result: [Int] = Array(repeating: -1, count: N)

for i in 0..<N {
    F[A[i] - 1] += 1
}

for i in 0..<N {
    while !stack.isEmpty && F[A[stack.last!] - 1] < F[A[i] - 1] {
        result[stack.popLast()!] = A[i]
    }
    stack.append(i)
}

print(result.map {String($0)}.joined(separator: " "))
  • F []를 구하는데 filter를 사용했었지만 시간 초과로 실패했었다.
  • 처음 F를 선언할 때 크기를 N으로 해주었지만 컴파일 에러가 나와서 구글링을 해서 해결했다. (근데 왜 그런거지.. ? )
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함