1793. Maximum Score of a Good Subarray

  • 두 개의 포인터 s, eλ₯Ό μ‚¬μš©ν•˜μ—¬ ν˜„μž¬μ˜ μ΅œμ†Œκ°’ minVal이 μœ μ§€λ˜λŠ” λ²”μœ„λ₯Ό μ°Ύμ•„μ„œ 결과값을 κ³„μ‚°ν•œλ‹€.
  • 기본적인 μ•„μ΄λ””μ–΄λŠ” λΉ„μŠ·ν•˜κ²Œ μ ‘κ·Όν–ˆμ§€λ§Œ λ²”μœ„λ₯Ό ν™•μž₯ν•˜λŠ” 방식을 λΆˆν•„μš”ν•˜κ²Œ μ–΄λ ΅κ²Œ κ΅¬ν˜„ν–ˆλ˜ 것이 μ‹œκ°„ 초과둜 μ΄μ–΄μ‘Œλ‹€.
    • μ •ν™•ν•˜κ²Œ ν˜„μž¬μ˜ μ΅œμ†Œκ°’ minVal이 μœ μ§€λ˜λŠ” λ²”μœ„λ₯Ό μ°Ύκ³ , λ‹€μŒ iterationμ—μ„œ ν˜„μž¬ λ²”μœ„μ˜ μ•žμ—μ„œ -1, λ’€μ—μ„œ +1 μœ„μΉ˜ 각각을 λ”°λ‘œ νƒμƒ‰ν•˜λŠ” λ°©μ‹μœΌλ‘œ κ΅¬ν˜„ν•˜μ˜€λ‹€.
    • μ΄λ ‡κ²Œ ν•˜λ©΄ 경우의 μˆ˜κ°€ κΈ°ν•˜κΈ‰μˆ˜μ μœΌλ‘œ 증가할 수 있기 λ•Œλ¬Έμ— λ¬Έμ œκ°€ λœλ‹€.
  • λ²”μœ„λ₯Ό 점차 ν™•μž₯ν•˜λ˜ ν˜„μž¬ λ²”μœ„μ˜ μ•žμ—μ„œ -1, λ’€μ—μ„œ +1 μœ„μΉ˜μ˜ 숫자 쀑 큰 값을 κΈ°μ€€μœΌλ‘œ λ²”μœ„λ₯Ό ν™•μž₯ν•œλ‹€.
    • λ‘˜ 쀑 큰 값을 선택할 수둝 ν˜„μž¬ μ΅œμ†Œκ°’ 보닀 ν¬κ±°λ‚˜ 같은 값을 선택할 ν™•λ₯ μ΄ λ†’κΈ° λ•Œλ¬Έμ΄λ‹€.
class Solution { public: int maximumScore(vector<int>& nums, int k) { int s = k, e = k, N = nums.size(); int minVal = nums[k]; int result = nums[k]; while (s > 0 || e < N - 1) { if (s == 0 || (e < N - 1 && nums[e + 1] > nums[s - 1])) ++e; else --s; minVal = min(minVal, min(nums[s], nums[e])); result = max(result, minVal * (e - s + 1)); } return result; } };