백준 2531번: 회전 초밥
난이도 - 실버1 🥈
알고리즘 분류: 투포인터
🧐 문제접근
윈도우 사이즈가 k로 정해져있어서, 윈도우를 먼저 만든다음, 한칸씩 이동하면서 최대값을 갱신하면됩니다
전체코드
//2531번 회전초밥
let t = readLine()!.split(separator: " ").map{Int(String($0))!}
let (n,d,k,c) = (t[0], t[1], t[2], t[3])
var arr = [Int]()
for _ in 0..<n {
arr.append(Int(readLine()!)!)
}
arr.append(contentsOf: arr)
var start = 0, end = 0, result = 0
var eatDict = [c:1]
while end < k {
if eatDict[arr[end]] == nil { eatDict[arr[end]] = 0 }
eatDict[arr[end]]! += 1
end += 1
}
while end < arr.count {
result = max(result, eatDict.count)
eatDict[arr[start]]! -= 1
if eatDict[arr[start]] == 0 {
eatDict[arr[start]] = nil
}
if eatDict[arr[end]] == nil {
eatDict[arr[end]] = 0
}
eatDict[arr[end]]! += 1
start += 1
end += 1
}
print(result)
한줄평가: 무난무난
Author And Source
이 문제에 관하여(백준 2531번: 회전 초밥), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@aurora_97/백준-2531번-회전-초밥저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)