Programmers - 연속 펄스 부분 수열의 합 with JAVA
로직 1. 1,-1,1,-1,1,-1 .... , -1,1,-1,1,-1,1 을 곱한 수열을 각각 판단한다. 2. DP를 활용해 최댓값을 구한다. 3. 두가지 수열이 가질 수 있는 각각의 최댓값 중 큰 값을 반환한다. 메인 아이디어 : "DP, 현재 수의 앞의 있는 값들의 합이 음수라면 고려하지 않는다. 즉, 연속 집합에서 앞의 집합의 합이 음수라면 더이상 지금의 집합부터는 더 큰수를 만들 수 없으니 버린다." 예를 들어, 1에서 곱한 값이 아래와 같다고 가정하자. 11, -3, -6, -1, 3, 1, 2, -4 [11] -> Max = 11, sum = 11 [11, -3] -> Max = 11, sum =8 [11, -3, -6] -> Max = 11, sum = 2 [11, -3, -6, -1] ..
Programmers - 시소짝궁 with JAVA
로직 아이디어 : 무게에 (1, 1/2, 2/3, 3/4, 4/3, 3/2, 2)를 곱한 값이 다른 사람들 중 존재한다면 answer += 1 이다. 몰랐던 점 : 같은 무게라도 다른 사람이다. 따라서 Map의 모든 값을 더해줘야한다. 코드 1 - Map을 활용해 메모이제이션한 경우 import java.util.*; class Solution { public long solution(int[] weights) { long answer = 0; double[] times = {1.0, 2.0/4, 3.0/4, 2.0/3, 4.0/3, 3.0/2, 2.0}; Map map = new HashMap(); for(double weight : weights) { map.put(weight, map.getOrDe..