Daily LeetCode Challenge - 904. Fruit Into Baskets

Min Young Kim·2023년 2월 7일
0

algorithm

목록 보기
67/198

Problem From.

https://leetcode.com/problems/fruit-into-baskets/

오늘 문제는 fruits 배열을 처음부터 끝까지 볼때, 두가지의 과일만 담을 수 있는 바구니가 있다고 할때, 담을 수 있는 최대의 과일 수를 구하는 문제였다.

이 문제는 sliding window 를 이용하여 풀었는데, window 의 크기를 조절해가며, 그 window 안에 두가지의 과일 종류만 있도록 하면 되었다.

1, 1, 2, 3, 3, 2, 1

위와같은 배열이 있다고 했을때
처음에 1을 보면 하나의 종류이므로 담고
그 다음 1을 보면 같은 종류이므로 담고
그 다음 2를 보면 다른 종류 하나이므로 담고
그 다음 3을 봤을때는 다른 종류가 나왔으므로 window 크기를 하나 줄이고 (start 를 1 더해주고)
그 다음 3을 봤을때는 아직 3종류의 과일이 있으므로 window 크기를 또 하나 줄여준다

이런식으로 나가면 바구니에 담을 수 있는 최대의 과일 수인 4가 나온다.

class Solution {
    fun totalFruit(fruits: IntArray): Int {
        val map = hashMapOf<Int, Int>()
        var start = 0
        var end = 0
        for(i in 0 until fruits.size) {
            
            map.put(fruits[i], map.getOrDefault(fruits[i], 0) + 1)
            
            if(map.size > 2) {
                map.put(fruits[start], map.get(fruits[start])!! - 1)
                
                if(map.get(fruits[start])!! == 0) {
                    map.remove(fruits[start])
                }
                
                start += 1
            }
              
            end += 1
        }
        return end - start
    }
}
profile
길을 찾는 개발자

0개의 댓글