출처: https://school.programmers.co.kr/learn/courses/30/lessons/131127
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제
풀이
discount 배열을 10개씩 돌면서 원하는 제품을 모두 구입할 수 있으면 result를 +1 하는 방법을 생각했습니다.
want와 number를 Map으로 변환해서, discount를 10개씩 돌면서 개수를 하나씩 빼주고 Map의 value 값이 모두 0 이하가 되면 원하는 것을 전부 구매할 수 있는 것입니다.
1) want와 number를 map의 형태로 바꿈
HashMap<String, Integer> map = new HashMap<>();
for(int m=0; m<number.length; m++){
map.put(want[m], number[m]);
}
2) 10일동안 원하는 제품을 얼마나 살 수 있는지 구하기
첫 째날부터 원하는 제품을 10일 동안내내 구매할 수 있는 날짜의 수를 구하는 것이기 때문에 총 날짜 수는 discount.length() - 10 + 1 일이 될 것입니다.
예를 들어 15일간 할인 행사를 한다면 (1일째 ~ 10일째), (2일째 ~ 11일째), (3일째 ~ 12일째), (4일째 ~ 13일째), (5일째 ~ 14일째), (6일째 ~ 15일째) 이므로 6일(= 15 - 10 + 1) 입니다.
따라서 1일째부터 discount.length() - 10 + 1일째까지 10일 동안의 물건들을 보면 됩니다.
배열의 인덱스이므로 범위는 1을 뺀 0 ~ discount.length() - 10 이 됩니다.
discount 배열을 10개씩 돌면서 그 값이 map에 있는지 확인하고, 있다면 value 값을 -1 해줍니다.
for(int i=0; i<=discount.length - 10; i++){
for(int j=0; j<10; j++){
if(map.containsKey(discount[i+j])){
map.replace(discount[i+j], map.get(discount[i+j]), map.get(discount[i+j]) - 1);
}
}
}
3) 원하는 제품을 모두 샀는지 확인하기
map의 value 값들이 전부 0 이하가 됐다면 원하는 제품을 모두 구매했다는 뜻이기 때문에 전부 0 이하인지 확인하고 맞다면 answer를 + 1 합니다.
boolean isAnswer = true;
for(String key : map.keySet()){
// 하나라도 0 초과라면 전부 구매 x
if(map.get(key) > 0){
isAnswer = false;
}
}
if(isAnswer) answer ++;
소스코드
import java.util.*;
class Solution {
public int solution(String[] want, int[] number, String[] discount) {
int answer = 0;
for(int i=0; i<=discount.length - 10; i++){
HashMap<String, Integer> map = new HashMap<>();
for(int m=0; m<number.length; m++){
map.put(want[m], number[m]);
}
for(int j=0; j<10; j++){
if(map.containsKey(discount[i+j])){
map.replace(discount[i+j], map.get(discount[i+j]), map.get(discount[i+j]) - 1);
}
}
boolean isAnswer = true;
for(String key : map.keySet()){
if(map.get(key) > 0){
isAnswer = false;
}
}
if(isAnswer) answer ++;
}
return answer;
}
}
'Programming > Programmers' 카테고리의 다른 글
[프로그래머스] 92335번 - k진수에서 소수 개수 구하기 (Java) (0) | 2023.06.22 |
---|---|
[프로그래머스] 17677번 - [1차] 뉴스 클러스터링 (Java) (0) | 2023.06.22 |
[프로그래머스] 64065번 - 튜플 (Java) (0) | 2023.06.22 |
[프로그래머스] 12949번 - 행렬의 곱셈 (Java) (0) | 2023.06.21 |
[프로그래머스] 87390번 - n^2 배열 자르기 (0) | 2023.06.21 |