알고리즘 풀이 방법입니다.
문제(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;
}
}
'Algorithm' 카테고리의 다른 글
[백준] 실버5 그룹 단어 체커 (0) | 2024.09.05 |
---|---|
[프로그래머스 , 리트코드] 시즌3 n^2 배열 자르기 , 행렬의 곱셈 , 의상 , H-Index , [1차] 캐시 , 기능개발 , 튜플 (4) | 2024.09.04 |
[프로그래머스] 괄호 회전하기 (0) | 2024.05.01 |
[프로그래머스] 연속 부분 수열 합의 개수 (0) | 2024.05.01 |
[프로그래머스] 멀리 뛰기 , 귤 고르기 (0) | 2024.04.23 |