알고리즘 풀이 방법입니다.
문제(Problem) -> 생각(Think) -> 해결책(Solution) -> 리뷰(Review) 를 통해서 정리해서 작성합니다.
Problem📄

 

https://school.programmers.co.kr/learn/courses/30/lessons/131127?language=java

 

프로그래머스

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

programmers.co.kr


Think🤔

Solution✍

10번 딱 돌았을 때 0개일 경우 해당 INDEX값 RETURN 

일단 10일 동안 회원 자격을 받기 때문에 
사야할 항목이 11개일 경우 0번째,1번째 부터 시작하는 경우의 수 2가지가 존재 
그럼 -> ( 사야할 항목 - 10 ) 로 반복문 돌림 RETURN값은 처음에 0으로 설정

HashMap에 키로 want를 넣고 number를 value로 넣음. (바나나,3)(사과,2)...(냄비,1)
반복문을 실행하면서 discount에 있는 키 값과 want의 키 값이 일치하면 먼저 해당 key의 value값이 0인지를 확인하고 0일 경우 해당 반복문은 끝이므로 continue 해준다.
아닐경우 -1을 해줘서 value값을 줄임.

정답인 경우 마지막 length까지 돌았을때 체크하는 값이 필요한데 , HashMap을 사용해서 마이너스 해줄경우 다음 반복문을 만들때 HashMap을 다시 생성해야하는 불편함이 있다.


Review🤩

 

import java.util.HashMap;

class Solution {
    public int solution(String[] want, int[] number, String[] discount) {
        int answer = 0;
        
        HashMap<String, Integer> hs = new HashMap<String,Integer>();

        for(int k=0; k<number.length; k++){
            hs.put(want[k],number[k]);    
        }
                             
        for(int i=0; i< discount.length - 9; i++){
            HashMap<String, Integer> hsChk = new HashMap<>(hs); // 깊은 복사 
            boolean flag = true;
            
            for(int j=i; j<10+i; j++){
               hsChk.put(discount[j], hsChk.getOrDefault(discount[j], 0) - 1);
            }
            
            for (Integer value : hsChk.values()) {
                if (value != 0) {
                    flag = false;
                    break;
                }
            }
            
            if(flag) {answer++;}
        }
        
        return answer;
    }
}

 

+ Recent posts