[Leet.3487] Streak Day 97 🔥

·2025년 3월 17일
0

SwiftAlgorithm

목록 보기
102/105
post-thumbnail

3487. Maximum Unique Subarray Sum After Deletion


contest441에 출제된 첫번째 문제를 풀어보려고 한다. 첫번째 문제답게 아주 쉽게 편성이 되어있다.

문제 설명

  • 숫자 nums배열이 주어지면 여기에서 합이 가장큰 subarray의 합을 return
  • subarray라서 무조건 한개이상의 배열원소를 포함해야함!
  • 각원소는 unique한것만 카운팅이 가능하다 ! (같은 수 한번씩만)

문제 풀이

  • 처음에는 큰 생각 안하고 그냥 엄청 간단하게 코드를 작성하고 정답처리를 기다렸는데 -> 땡🚫
class Solution {
    func maxSum(_ nums: [Int]) -> Int {
        return (Set(nums).reduce(0) {
            $0 + $1
        })
    }
}
  • 아! 이거 음수 처리를 안해줬구나 ! -> 땡🚫
class Solution {
    func maxSum(_ nums: [Int]) -> Int {
        return (Set(nums.filter{$0 >0}).reduce(0) {
            $0 + $1
        })
    }
}
  • subArray라서 원소가 하나있으면 음수라도 0대신 음수를 출력해야하는구나 ! -> 땡🚫
class Solution {
    func maxSum(_ nums: [Int]) -> Int {
        if(nums.count < 2){
            return nums[0]
        }
        return (Set(nums.filter { $0 > 0 }).reduce(0) {
            $0 + $1
        })
    }
}

한번에 풀때 좀 제대로 풀어야하는데, 계속 하나씩 틀려서 이번에 정신차리고 한번에 좀 고치려했다.

class Solution {
    func maxSum(_ nums: [Int]) -> Int {
        let checkNums = nums.filter { $0 > 0 }
        if checkNums.count < 1 {
            if let tmp = nums.max() {
                return tmp
            } else {
                return 0
            }
        }
        return (Set(checkNums).reduce(0) {
            $0 + $1
        })
    }
}
  1. checkNums로 원소가 전부 음수로 이루어져있는지 판단해줬다.
  2. 다 음수라면, 해당 배열에서 가장 큰 값 하나 return
  3. 그게 아니라면 일반적으로 양수 전부 더해서 return

최종 제출 코드

class Solution {
    func maxSum(_ nums: [Int]) -> Int {
        let checkNums = nums.filter { $0 > 0 }
        if checkNums.count < 1 {
            if let tmp = nums.max() {
                return tmp
            } else {
                return 0
            }
        }
        return (Set(checkNums).reduce(0) {
            $0 + $1
        })
    }
}

제출이 얼마없는 문제가 출제돼서 그런지 통계는 잡히지 않았다.


profile
기억보단 기록을

0개의 댓글