import java.io.*;
import java.lang.reflect.Array;
import java.util.*;
public class Main {
public int solution(int[] nums, int k){
int ans, sum =0;
for(int i=0; i<k; i++) sum += nums[i];
ans = sum;
for(int i=k; i<nums.length; i++) {
sum += (nums[i] - nums[i-k]);
ans = Math.max(ans, sum);
}
return ans;
}
public static void main(String[] args) throws IOException {
Main T = new Main();
int[] arr = new int[]{12,15,11,20,25,10,20,19,13,15};
int[] arr1 = new int[]{1,2,3,5,6,7,1,3,9};
System.out.println(T.solution(arr, 3));
}
}
- python
def solution(nums, k):
answer=0
sum=0
for i in range(k):
sum+=nums[i]
answer=sum
for i in range(k, len(nums)):
sum+=(nums[i]-nums[i-k])
answer=max(answer, sum)
return answer
print(solution([1, 2, 3, 5, 6, 7, 1, 3, 9], 5))
2) 카드 가져가기
- java
import java.io.*;
import java.lang.reflect.Array;
import java.util.*;
public class Main {
public int solution(int[] nums, int k){
int ans = 0;
for(int i=0; i<nums.length; i++) ans += nums[i];
int m = nums.length-k;
int sum = 0;
for(int i=0; i<m; i++) sum += nums[i];
int mins = sum;
for(int i=m; i<nums.length; i++){
sum += (nums[i] - nums[i-m]);
mins = Math.min(mins, sum);
}
return ans-mins;
}
public static void main(String[] args) throws IOException {
Main T = new Main();
int[] arr = new int[]{2,3,7,1,2,1,5};
int[] arr1 = new int[]{1,2,3,5,6,7,1,3,9};
System.out.println(T.solution(arr, 4));
}
}
- python
class Solution:
def solution(nums, k):
answer=sum(nums)
m=len(nums)-k
s=0
for i in range(m):
s+=nums[i]
mins=s
for i in range(m, len(nums)):
s+=(nums[i]-nums[i-m])
if s<mins:
mins=s
return answer-mins
3) 연속부분수열 1
- java
import java.io.*;
import java.lang.reflect.Array;
import java.util.*;
public class Main {
public int solution(int[] nums, int k){
int ans = 0;
int left = 0;
int sum = 0;
for(int right=0; right<nums.length; right++){
sum += nums[right];
while(sum > k){
sum -= nums[left];
left++;
}
if (sum == k) ans++;
}
return ans;
}
public static void main(String[] args) throws IOException {
Main T = new Main();
int[] arr = new int[]{1,2,1,3,1,1,1,2};
int[] arr1 = new int[]{1,1,1,1,1,1};
System.out.println(T.solution(arr1, 3));
}
}
- python
def solution(nums, m):
answer=0
lt=0
sum=0
for rt in range(len(nums)):
sum+=nums[rt]
while sum>m:
sum-=nums[lt]
lt+=1
if sum==m:
answer+=1
return answer
print(solution([1, 2, 1, 3, 1, 1, 1, 2], 6))
4) 연속부분수열 2
- java
import java.io.*;
import java.lang.reflect.Array;
import java.util.*;
public class Main {
public int solution(int[] nums, int k){
int ans = 0;
int left = 0;
int sum = 0;
for(int right=0; right<nums.length; right++){
sum += nums[right];
while(sum > k){
sum -= nums[left];
left++;
}
if (sum <= k) ans += (right-left+1);
}
return ans;
}
public static void main(String[] args) throws IOException {
Main T = new Main();
int[] arr = new int[]{1,3,1,2,3};
int[] arr1 = new int[]{1,1,1,1,1,1};
System.out.println(T.solution(arr1, 3));
}
}
- python
def solution(nums, m):
answer=0
lt=0
sum=0
for rt in range(len(nums)):
sum+=nums[rt]
while sum>m:
sum-=nums[lt]
lt+=1
answer+=(rt-lt+1)
return answer
print(solution([1, 3, 1, 2, 3], 5))
++ 네이버 코딩테스트 2번 문제
- java
import java.io.*;
import java.lang.reflect.Array;
import java.util.*;
public class Main {
public int solution(int money, int[] cost){
int ans = 0;
int left = 0;
int sum = 0;
for(int right=0; right<cost.length; right++){
sum += cost[right];
while(sum > money){
sum -= cost[left];
left++;
}
if(sum <= money) ans = Math.max(ans, (right-left+1));
}
return ans;
}
public static void main(String[] args) throws IOException {
Main T = new Main();
int[] cost = new int[]{0,900,0,200,150,0,30,50}; // 5
int[] cost1 = new int[]{247,317,151,192}; // 0
System.out.println(T.solution(420, cost));
}
}
5) 최대길이 연속부분수열
- java
import java.io.*;
import java.lang.reflect.Array;
import java.util.*;
public class Main {
public int solution(int[] nums, int k){
int ans = 0;
int left = 0;
int sum = 0;
for(int right=0; right<nums.length; right++){
if(nums[right] == 0) sum++;
while(sum > k){
if(nums[left] == 0) sum--;
left++;
}
ans = Math.max(ans, right-left+1);
}
return ans;
}
public static void main(String[] args) throws IOException {
Main T = new Main();
int[] arr = new int[]{1,1,0,0,1,1,0,1,1,0,1,1,0,1};
System.out.println(T.solution(arr, 2));
}
}
import java.io.*;
import java.lang.reflect.Array;
import java.util.*;
public class Main {
// k 개 이하의 홀수 개수를 세는 counting 메소드 시,
// counting(k) - counting(k-1) 이 정답
public int counting(int[] nums, int k){
int ans = 0;
int left = 0;
int sum = 0;
for(int right=0; right<nums.length; right++){
if(nums[right]%2 == 1) sum++;
while(sum > k){ // sum 은 k 개 이하가 됨
if(nums[left]%2 == 1) sum--;
left++;
}
ans += (right-left+1);
}
return ans;
}
public int solution(int[] nums, int k){
int ans = counting(nums, k) - counting(nums, k-1);
return ans;
}
public static void main(String[] args) throws IOException {
Main T = new Main();
int[] arr = new int[]{1,2,1,1,2};
int[] arr1 = new int[]{2,2,2,1,2,2,1,2,2,2};
System.out.println(T.solution(arr, 2));
}
}
- python
function solution(nums, k) {
let answer = 0;
function counting(k) {
let left = 0;
let odd = 0;
let sum = 0;
for (let right = 0; right < nums.length; right++) {
if (nums[right] % 2 === 1) odd++;
while (odd > k) {
if (nums[left] % 2 === 1) odd--;
left++;
}
sum += right - left + 1;
}
return sum;
}
answer = counting(k) - counting(k - 1);
return answer;
}
console.log(solution([2,2,2,1,2,2,1,2,2,2], 2)); //16
console.log(solution([1,1,2,1,1], 3)); //2
console.log(solution([2,4,6], 1)); //0
console.log(solution([1,2,3,4,5,6,7,8,9], 2)); //12
console.log(solution([1,3,5,7,9,11,13], 3)); //5
console.log(solution([1,2,4,5,7,8,12,14,16,17,19], 2)); //22
console.log(solution([3], 1)); //1
console.log(solution([1,1,1,1,1], 1)); //5
console.log(solution([2,2,2,2,2,2,2,1], 1)); //8
console.log(solution([2,2,1,2,2,6], 1)); //12
7) 연속된 자연수의 합
- java
import java.io.*;
import java.util.*;
public class Main {
public int solution(int n){
int ans = 0;
int m = n/2+1;
int[] nums = new int[m];
for(int i=0; i<m; i++) nums[i] = i+1;
int left = 0;
int sum = 0;
for(int right=0; right<nums.length; right++){
sum += nums[right];
while(sum > n){
sum -= nums[left];
left++;
}
if(sum == n) ans++;
}
return ans;
}
public static void main(String[] args) throws IOException {
Main T = new Main();
System.out.println(T.solution(15));
}
}
import java.io.*;
import java.util.*;
public class Main {
public int solution(int n){
int ans = 0;
int cnt = 1;
n--;
while(n>0){
cnt++;
n -= cnt;
if(n%cnt == 0) ans++;
}
return ans;
}
public static void main(String[] args) throws IOException {
Main T = new Main();
System.out.println(T.solution(45678));
}
}
- python
function solution(n){
let answer=0, sum=0;
let m=parseInt(n/2)+1;
let nums=Array.from({length:m}, (v, i)=>i+1);
let lt=0;
for(let rt=0; rt<m; rt++){
sum+=nums[rt];
while(sum>n){
sum-=nums[lt++];
}
if(sum===n) answer++;
}
return answer;
}
console.log(solution(15));
console.log(solution(98765));
8) 사과
- java
import java.io.*;
import java.util.*;
public class Main {
public int solution(int[] apples, int[] power, int m){
int ans = 0;
int sum = 0;
for(int i=0; i<apples.length; i++)
if(power[i] == 1) sum += apples[i];
for(int i=0; i<m; i++)
if(power[i] == 0) sum+= apples[i];
ans = sum;
int left = 0;
for(int right=m; right<apples.length; right++){
if(power[right] == 0) sum += apples[right];
if(power[left] == 0) sum -= apples[left];
left++;
ans = Math.max(ans, sum);
}
return ans;
}
public static void main(String[] args) throws IOException {
Main T = new Main();
int[] arr1 = new int[]{3, 2, 1, 2, 1, 3};
int[] arr2 = new int[]{1, 0, 0, 1, 0, 0};
System.out.println(T.solution(arr1, arr2, 3));
}
}
- python
def solution(apples, power, m):
sum=0
for i in range(len(apples)):
if power[i]==1:
sum+=apples[i]
for i in range(m):
if power[i]==0:
sum+=apples[i]
answer=sum
lt=0
for rt in range(m, len(apples)):
if power[rt]==0:
sum+=apples[rt];
if power[lt]==0:
sum-=apples[lt]
lt+=1
answer=max(answer, sum)
return answer
print(solution([3, 2, 1, 2, 1, 3], [1, 0, 0, 1, 0, 0], 3))
9) 영화관람
- java
import java.io.*;
import java.util.*;
public class Main {
public int[] solution(int[] nums){
int n = nums.length;
int[] ans = new int[n];
Stack<Integer> stack = new Stack<>();
for(int i=n-1; i>=0; i--){
while(!stack.empty() && nums[i] > nums[stack.peek()]){
ans[stack.peek()] = i+1;
stack.pop();
}
stack.push(i);
}
return ans;
}
public static void main(String[] args) throws IOException {
Main T = new Main();
int[] arr = new int[]{50, 46, 55, 76, 65, 50, 55, 53, 55, 50};
//System.out.println(T.solution(arr));
for(int x : T.solution(arr)){
System.out.print(x+" ");
}
}
}
- python
import collections
def solution(nums):
n=len(nums)
answer=[0]*n
stack=[]
for i in range(n-1, -1, -1):
while stack and nums[i]>nums[stack[-1]]:
answer[stack[-1]]=i+1
stack.pop()
stack.append(i)
return answer
print(solution([50, 46, 55, 76, 65, 50, 55, 53, 55, 50]))