문제 풀이 #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입니다.
혼자 풀이
한줄 고치기 문제입니다.
배열 내부를 일정 길이만큼 탐색하는 문제로 여러번 비슷한 문제가 나왔습니다.
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..." 메뉴에서 불러다 쓰시면 됩니다.
'Programming > Cos Pro 1급' 카테고리의 다른 글
Cos Pro 1급 공부 사이트 추천 - 구름에듀(https://edu.goorm.io/) (2) | 2022.10.25 |
---|---|
Cos Pro 1급 - 샘플 문제 풀이 3차 10번 (Iterator를 이용한 List순회) (2) | 2022.10.21 |
Cos Pro 1급 - 샘플 문제 풀이 3차 8번 (continue와 break) (2) | 2022.10.20 |
Cos Pro 1급 - 샘플 문제 풀이 3차 7번 (자리수 별 연산 방법) (1) | 2022.10.20 |
Cos Pro 1급 - 샘플 문제 풀이 3차 6번 (n이하의 소수를 찾아 더하기) (1) | 2022.10.19 |
댓글