[Leet.3477] Streak Day 101 🔥 ..Pause

·2025년 3월 21일
0

SwiftAlgorithm

목록 보기
105/105
post-thumbnail

3477. Fruits Into Baskets II

Contest 440번의 1번 문제다.


문제 설명

  • 두가지 정수 배열이 주어지고, 각 배열의 길이 n
  • 과일을 선택해서 baskets배열에 맞게 넣어주면된다.
  • 이때는 과일갯수보다 큰 바구니면서, 가장 왼쪽에 있는애를 담아주면된다.

문제 풀이

class Solution {
    func numOfUnplacedFruits(_ fruits: [Int], _ baskets: [Int]) -> Int {
        var basket_visited = Array(repeating: false, count: baskets.count)
        var cnt = 0
        for fruit in fruits {
            var isFound = false
            for (idx, plate) in baskets.enumerated() {
                if plate >= fruit && !basket_visited[idx] {
                    basket_visited[idx] = true
                    isFound = true
                    break
                }
            }
            if !isFound {
                cnt += 1
            }
        }
        return cnt
    }
}
  • 이미 담은 basket표시 위한 visited 배열정도가 좀 특이한점? 이고 끝가지 못찾았을때 카운팅을 해줘야하기때문에이걸 isFound라는 변수로서 처리를 해줬다.

최종 제출 코드

class Solution {
    func numOfUnplacedFruits(_ fruits: [Int], _ baskets: [Int]) -> Int {
        var basket_visited = Array(repeating: false, count: baskets.count)
        var cnt = 0
        for fruit in fruits {
            var isFound = false
            for (idx, plate) in baskets.enumerated() {
                if plate >= fruit && !basket_visited[idx] {
                    basket_visited[idx] = true
                    isFound = true
                    break
                }
            }
            if !isFound {
                cnt += 1
            }
        }
        return cnt
    }
}

타인의 코드

class Solution {
    func numOfUnplacedFruits(_ fruits: [Int], _ baskets: [Int]) -> Int {

        var b = baskets
        var r = 0

        for f in fruits {
            guard let i = b.firstIndex(where: { $0 >= f }) else {
                r += 1
                continue
            }
            b.remove(at: i)
        }

        return r
    }
}

  • guard let을 활용해 firstIndex로 조건을 만족하는 바구니를 찾고, where로 필터링해서 바구니가 없으면 카운팅하는 방식
  • 제가visited로 체크한 것과 달리, 상대방은 바구니를 아예 remove로 제거한 것을 볼 수 있다.
  • 성능 차이는 거의 없었지만, firstIndexremove는 항상 전체 배열을 대상으로 하니까, 앞에서부터 순차적으로 찾는 방식 정도가 차이인 것 같다.
  • 다만 isFound 변수를 억지로 만들어서 예외를 처리한 게 좀 마음에 안 들었는데, 다음부터는 guard let 활용해서 예외 처리해주면 될 것 같다.

101일정도 진행하면서, 이제 Apple Developer Academy @Postech 합격생에서 러너가되어 2주를 보내고, Challenge1을 하고 있는 중인데, 챌린지가 생각보다 시간을 많이 잡아먹는바람에, 챌린지 참여 이후 알고리즘을 풀면 거의 하루가 다 가버리는 참사가 발생했기에..
정작 나의 현주소는 Swift로 앱개발을 진행하는게 불가능한 수준인데, 계속해서 알고리즘을 매일 풀면서 그 부분을 메우기에는 아직 부족한 것 같아서, 이제는 SwiftUI개발에 좀 더 비중을 두어야겠다고 생각했고, 알고리즘은 스터디를 통해서 이틀에 한번? 정도 주어진 문제를 풀면서 나아갈 것 같다. 블로그는 TIL이나 WIL느낌으로 Swift로 앱개발을 진행하면서 생긴 궁금점들 같은거를 묶어서 내보는 방식이 될 것 같다.

profile
기억보단 기록을

0개의 댓글