programmers_[카카오 인턴] 보석 쇼핑_java

2023. 3. 4. 17:18Algorithm/Programmers

728x90

https://school.programmers.co.kr/learn/courses/30/lessons/67258

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

import java.util.*;

class Solution {
    public int[] solution(String[] gems) {
        int[] answer = new int[2];
        
        int gemKindCnt = countGem(gems);
        int left = 1;        
        int gemsSize = gems.length;
        int size = 100001;
        
        // 2. 구간 구하기
        Map<String, Integer> choiceMap = new HashMap<>();
        
        for(int i = 1; i<= gemsSize; i++){             
            choiceMap.put(gems[i-1], choiceMap.getOrDefault(gems[i-1], 0) + 1);
            
            // 기존 종류 보석
            while(choiceMap.get(gems[left-1]) > 1){
                choiceMap.put(gems[left-1], choiceMap.get(gems[left-1])-1);
                left++;
            }
            
            if(choiceMap.size() == gemKindCnt){
                if(size > i - left){
                    answer[0] = left;
                    answer[1] = i;
                    size = i - left;
                }
            }    
        }
        
        return answer;
    }
    
    // 보석 종류 개수 구하기
    public int countGem(String[] gems){
        Set<String> gemsSet = new HashSet<>();
        for(String gem : gems){
            gemsSet.add(gem);
        }
        return gemsSet.size();
    }
    
    
}

'Algorithm > Programmers' 카테고리의 다른 글

programmers_스티커 모으기(2)_java  (0) 2023.03.06
programmers_징검다리 건너기_java  (0) 2023.03.06
programmers_기지국 설치_java  (0) 2023.03.04
programmers_숫자 게임_java  (0) 2023.03.01
programmers_단속카메라_java  (0) 2023.03.01