본문 바로가기

알고리즘/다시 봐야할 것들

Minimum Number of Operations to Move All Balls to Each Box

처음 생각한 답.

import java.util.HashSet;
import java.util.Set;

class Solution {
    public int[] minOperations(String boxes) {
        int[] answer = new int[boxes.length()];
        Set<Integer> set = new HashSet<>();
        int boxLength = boxes.length();

        for (int i = 0; i < boxLength; i++) {
            if (boxes.charAt(i) == '1') {
                set.add(i);
            }
        }

        for (int i = 0; i < boxLength; i++) {
            int count = 0;
            for (int j : set) {
                count += Math.abs(i-j);
            }
            answer[i] = count;
        }

        return answer;
    }
}

리트코드에서 찾은 답지

class Solution {
    public int[] minOperations(String boxes) {
        int n = boxes.length();

        int[] left = new int[n];
        int[] right = new int[n];
        int[] ans = new int[n];

        int count = boxes.charAt(0) - '0';
        for(int i = 1 ; i < n ; i++){
            left[i] = left[i - 1] + count;
            count += boxes.charAt(i) - '0';
        }

        count = boxes.charAt(n - 1) - '0';
        for(int i = n - 2 ; i >=0 ; i--){
            right[i] = right[i + 1] + count;
            count += boxes.charAt(i) - '0';
        }

        for(int i = 0 ; i < n ; i++) {
            ans[i] = left[i] + right[i];
        }

        return ans;
    }
}

처음 푼 답안은 그냥 일단 풀어보고 최적화해보자는 생각으로 풀었는데 이중 for문 때문에 실행 시간이 엄청 김.
계속 고민했는데 도저히 코드를 못짜겠어서 답지 찾아봄.
내가 풀려고 했던 방식과 제일 비슷한 코드가 위에 코드인데 나는 저 코드를 짜는데에 실패함.
답지 보면 아주 간단해보이는 코드인데 이해하는데 시간도 좀 걸렸음.
무조건 다시 풀어봐야할 문제. 사실상 못 풀었음.

728x90
반응형