23년 8월 11일 [알고리즘 - 슬라이딩 윈도우]

sua·2023년 8월 11일
0

알고리즘 가보자고

목록 보기
74/101

인프런 최대 매출

문제

나의 풀이

import java.util.Scanner;

public class MaxTurnover {
    public static int solution(int n, int k, int[] arr) {
        int answer = 0, sum = 0;
        for(int i = 0; i < k; i++) {
            sum += arr[i];
        }
        answer = sum;
        for(int i = k; i < n; i++) {
            sum += (arr[i] - arr[i - k]);
            answer = Math.max(answer, sum);
        }

        return answer;
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int k = sc.nextInt();
        int arr[] = new int[n];
        for(int i = 0; i < n; i++) {
            arr[i] = sc.nextInt();
        }
        System.out.println(MaxTurnover.solution(n, k, arr));
    }
}

결과


인프런 이동 횟수

문제

나의 풀이

import java.util.Arrays;

public class Movement {
    public static int solution(int[] nums) {
        int answer = 0;
        Arrays.sort(nums); // 무게를 기준으로 오름차순 정렬
        int left = 0; // 가장 가벼운 것 가리킴
        int right = nums.length - 1; // 가장 무거운 것 가리킴
        while(left <= right) { // 엇갈릴 때까지
            if(nums[left] + nums[right] <= 5) { // 가장 가벼운것과 가장 무거운것의 합이 5 이하인경우
                answer++; // 이동횟수 증가
                left++;
                right--;
            } else { // 5를 넘어가는 경우 -> 가장 무거운것만 옮기기
                answer++; // 이동횟수 증가
                right--;
            }
        }
        return answer;
    }

    public static void main(String[] args) {
        System.out.println(Movement.solution(new int[]{2, 5, 3, 4, 2, 3}));
        System.out.println(Movement.solution(new int[]{3, 3, 3, 3, 3}));
    }
}

한번에 여러개를 옮길 수 있다고 되어있지만 실제로 제한사항을 보면 모든 물건의 무게가 2kg 이상 5kg 이하이므로 최대 5kg밖에 들지 못하기 때문에 모든 물건이 2kg더라도 최대 2개 밖에 옮기지 못한다. 즉, 타이타닉 문제에서 한번에 두명만 태울 수 있다는 것과 똑같다고 볼 수 있다. 따라서, 풀이 코드도 똑같다.

결과

profile
가보자고

1개의 댓글

comment-user-thumbnail
2023년 8월 11일

이렇게 유용한 정보를 공유해주셔서 감사합니다.

답글 달기