반응형
17. 귤 고르기

문제

import java.util.*;

class Solution {
    public int solution(int k, int[] tangerine) {
        int answer = 0;
        Map<Integer, Integer> map = new HashMap<>();
        
        for(int size : tangerine){
            map.put(size, map.getOrDefault(size, 0) + 1);
        }
        
        List<Integer> list = new ArrayList<>(map.keySet());
        
        list.sort(((o1, o2) -> map.get(o2) - map.get(o1)));
        
        for(int i : list){
            if(k <= 0){
                break;
            }
            
            answer++;
            k -= map.get(i);
        }

        return answer;
    }
}

<작성한 코드>

귤의 크기를 키값으로 갖고 개수를 벨류로 갖는 map 형태의 구조를 먼저 만들었다. tangerine안에 들어있는 귤의 사이즈에 따라 벨류값을 1씩 증가시켰으며, list를 하나 만들어주고 map의 키들을 가져와 저장해 줬다. 그 뒤 list.sort를 사용해 정렬을 해줬고, 람다식을 사용해서 두 값의 차를 비교해서 정렬을 해줬다. o1- o2가 음수면 o1이 앞, 양수면 o2가 앞으로 오게 된다. 결과적으로 내림차순을 해줬다. 그 뒤 forEach문을 사용해서 list에 있는 값들을 전부 비교해 줬고, 시작 조건문에는 k가 0과 같거나 0보다 작아지면 멈추도록 했다. answer에 1씩 추가해 줬고, map에서 i키에 해당하는 벨류값을 가져와 k에서 빼주고 이를 반복했다. 마지막으로 answer을 반환해 줬다.

 

 

 

 

 

18. 연속 부분 수열 합의 개수

문제

import java.util.*;

class Solution {
    public int solution(int[] elements) {
        int answer = 0;
        Set<Integer> set = new HashSet<>();
        
        for(int i=0; i<elements.length; i++){
            int sum = 0;
            for(int j=1; j<=elements.length; j++){
                sum += elements[(i + j - 1) % elements.length];
                set.add(sum);
            }
        }
        
        answer = set.size();
        
        return answer;
    }
}

<작성한 코드>

중복된 숫자를 제거하기 위해 set을 사용했다. for문을 통해 elements의 원소를 전부 가져와 반복했고, 길이만큼의 sum을 더하고 초기화시켜주기 위해 내부에서 초기화했다. 그 뒤 두 번째 for문에서는 더할 수열의 길이만큼 반복한다. 1부터 elements의 길이까지 반복시켰고, 배열이 끝날 때 그다음의 수를 연결하기 위해 나머지연산을 사용해 (i+j-1)% elements.length를 해서 값을 구해줬다. 그 뒤 set의 길이만큼 answer에 넣어주고 반환하였다.

반응형

+ Recent posts