inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비

최대 매출 문제

117

이진욱

작성한 질문수 1

0

import java.util.Scanner;

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

        return answer;
    }
    public static void main(String[] args) {
        Main T = new Main();
        Scanner kb = new Scanner(System.in);

        int n = kb.nextInt();
        int m = kb.nextInt();
        int[] arr = new int[n];
        for(int i=0;i<n;i++) arr[i] = kb.nextInt();

        System.out.println(T.solution(n, m, arr));
    }
}

해당 코드가 왜 정답이 되는지 모르겠습니다.

위 코드처럼 작성하면 for문의 제일 마지막번째에 sum과 answer를 비교하지 않고 answer를 리턴하게 되는건데 그럼 오답이지 않나요?

10 3

1 2 3 4 5 6 7 8 9 10

이렇게 마지막 연속된 K일에서 최댓값으로 주어진다면 값이 제대로 안 나오는데 왜 정답이 되는지 궁금합니다.

java 코딩-테스트

답변 1

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다.

이진욱님의 질문은 “최대 매출” 문제에서 주어진 코드가 왜 정답인지에 대한 이해와 관련이 있습니다. 코드가 마지막 연속된 K일의 합을 제대로 비교하지 않는 듯 보이지만 정답이 나오는 이유를 질문하셨습니다.

이와 관련된 내용을 이전에 다룬 질문 중 하나에서 발견할 수 있습니다. 해당 질문은 “최대매출 한번 봐주세요”에서 유사한 문제 상황과 코드 구조에 대한 설명이 제공됩니다. 질문자 역시 for문 내에서 윈도우의 합을 계산하고 max 값을 업데이트하는 로직에 대해 궁금증을 제기하였습니다. 강의 내용과 관련된 질문에 대한 답변에서 이러한 로직의 정당성과 정답 처리되는 이유에 대해 설명이 제공됩니다.

구체적으로, 제공된 코드는 슬라이딩 윈도우 기법을 사용하여 문제를 해결합니다. 이 접근법은 윈도우의 시작 부분을 제외하고 새로운 원소를 더하며 윈도우를 이동시키는 기법입니다. 질문에서 제시된 코드는 마지막 for문에서 다음 윈도우로 넘어갈 때 새로운 값을 더하고 이전 값을 뺌으로써 최대 합을 업데이트합니다. 검증 로직이 윈도우가 이동할 때마다 적용되기 때문에, 질문에서 우려한 바와 같이 마지막 윈도우에 대한 비교가 실제로는 이루어집니다.

이러한 처리 방식은 간과하기 쉬운 부분인데, 이는 슬라이딩 윈도우 기법의 핵심적인 부분 중 하나입니다. 이 기법을 사용하면 시간 복잡도를 효율적으로 관리하며 문제를 해결할 수 있습니다.

추가로 질문하신 코드의 작성 방식과 유사한 상황에 대한 설명은 강의 내에서 제공되는 지식을 바탕으로 학습자가 코드의 작동 방식을 이해하는 데 도움이 될 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

안녕하세요. 바뀐 채점사이트 관련해서 문의드립니다.

0

33

1

갑자기 채점 사이트가 바뀌었어요

0

34

1

문제 리스트 페이지

0

29

1

채점 사이트 관련 질문드립니다

0

24

1

봉우리 문제 질문입니다

0

84

2

씨름 선수 문제에서 각 선수의 몸무게나 키가 같을 수도 있다면?

0

65

0

이 코드랑 영상 코드중에 뭐가 더 좋은 코드인가요?

0

72

0

가중치 방향 그래프에서 가중치가 0인 간선을 표현하는 방법

0

67

1

좌표 정렬 문제 이 코드가 왜 틀린지 모르겠습니다 ㅠㅠ

0

85

2

6-7 강의에서

0

48

1

6-6. 장난꾸러기 질문 있습니다.

0

46

1

강의 수강후 코딩테스트

0

111

1

answer 변수 사용 여부

0

46

1

2중 for문

1

85

2

2-11. 임시반장정하기 (Runtime Error)

0

63

1

혹시 LinkedList 같은 자료 구조들은 따로 배우지 않나요?

0

70

1

이런 풀이는 어떨까요

0

44

1

자바 스트림 방식의 효율성 질문 드립니다.

0

57

1

알고리즘 자료 구조들..

0

63

1

StringBuilder vs BufferdWriter

0

48

1

원더랜드(프림)

0

50

1

이런 코드는 어떤가요?

0

61

1

bfs 풀이

0

57

1

병합정렬

0

57

1