Scroll indicator done
728x90

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, 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));
    }
}

- python

function solution(nums, k){
    let answer=0, lt=0, cnt=0;
    for(let rt=0; rt<nums.length; rt++){
        if(nums[rt]===0) cnt++;
        while(cnt>k){
            if(nums[lt]===0) cnt--; 
            lt++;      
        }
        answer=Math.max(answer, rt-lt+1);
    }        
    return answer;
}

console.log(solution([1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1], 2));

6) k개 홀수가 있는 연속부분수열

- java

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]))

 

728x90