본문 바로가기
Programming/Cos Pro 1급

Cos Pro 1급 - 샘플 문제 풀이 3차 9번 (숫자 배열의 구간별 합계)

by 우공80 2022. 10. 21.
728x90

팝업스토어 매출이 최대가 되는 오픈일 찾기

문제 풀이 #9


모 매장에서는 팝업스토어를 열려고 합니다. 팝업스토어란 한정 기간 문을 여는 매장입니다. 팝업스토어는 k일 동안 연속해서 열 예정입니다. n일 동안의 추정 매출액이 주어질 때, 언제 팝업스토어를 열어야 가장 매출이 높을지 알아보려 합니다.

n일 간의 추정 매출액이 담긴 배열 revenue와 팝업스토어를 열 날의 수 k가 매개변수로 주어질 때, 최대 매출액 합을 return 하도록 solution 메소드를 작성했습니다. 그러나, 코드 일부분이 잘못되어있기 때문에, 몇몇 입력에 대해서는 올바르게 동작하지 않습니다. 주어진 코드에서 _한 줄_만 변경해서 모든 입력에 대해 올바르게 동작하도록 수정하세요.


매개변수 설명

추정 매출액이 담긴 배열 revenue와 팝업스토어를 열 날의 수 k가 solution 메소드의 매개변수로 주어집니다.

  • revenue의 길이는 1 이상 200,000 이하입니다.
  • revenue의 원소는 10,000 이하의 자연수입니다.
  • k는 1 이상 100,000 이하이고, revenue의 길이보다 작거나 같습니다.

return 값 설명

최대 매출액 합을 return 해주세요.


예시

revenue k return
[1, 1, 9, 3, 7, 6, 5, 10] 4 28
[1, 1, 5, 1, 1] 1 5

예시 설명

예시 #1
4일간 매출액 합이 최대가 되는 경우는 [7, 6, 5, 10]입니다. 따라서 최대 매출액은 28입니다.

예시 #2
1일간 매출액 합이 최대가 되는 경우는 [5]입니다. 따라서 최대 매출액은 5입니다.

728x90

 

혼자 풀이

한줄 고치기 문제입니다.
배열 내부를 일정 길이만큼 탐색하는 문제로 여러번 비슷한 문제가 나왔습니다. 
for문의 초기값을 무엇으로 정할지 신경써서 볼 필요가 있습니다.

/************************************************************
  3차 9번 팝업스토어 매출 최대가 되는 오픈일 찾기
 ***********************************************************/
class MySolution {
    public int solution(int[] revenue, int k) {
        int answer = 0;
        int n = revenue.length;
        int sum = 0;
        for (int i = 0; i < k; i++) {
            sum += revenue[i];
        }
        answer = sum;
//        for (int i = 0; i < n; i++) {
        for (int i = k; i < n; i++) {
            sum = sum - revenue[i - k] + revenue[i];
            if (answer < sum)
                answer = sum;
        }
        return answer;
    }
    
    // 아래는 테스트케이스 출력을 해보기 위한 main 메소드입니다. main 메소드는 잘못된 부분이 없으니, solution 메소드만 수정하세요.
    public static void main(String[] args) {
        MySolution sol = new MySolution();
        int[] revenue1 = {1, 1, 9, 3, 7, 6, 5, 10};
        int k1 = 4;
        int ret1 = sol.solution(revenue1, k1);

        // [실행] 버튼을 누르면 출력 값을 볼 수 있습니다.
        System.out.println("solution 메소드의 반환 값은 " + ret1 + " 입니다.");

        int[] revenue2 = {1, 1, 5, 1, 1};
        int k2 = 1;
        int ret2 = sol.solution(revenue2, k2);

        // [실행] 버튼을 누르면 출력 값을 볼 수 있습니다.
        System.out.println("solution 메소드의 반환 값은 " + ret2 + " 입니다.");        
    }
}

 

정답


정답이 혼자 풀이와 동일합니다.

첨부 파일

프로젝트 파일 전체를 첨부합니다.
Solution 이 문제, CorrectSolution 이 정답, MySolution이 제가 푼 것입니다.
"Project from existing sources..." 메뉴에서 불러다 쓰시면 됩니다.

ThirdQuestion9.zip
0.01MB

출처: https://www.ybmit.com/cos_pro/cos_pro_r_test.jsp

728x90

댓글