문제
https://school.programmers.co.kr/learn/courses/30/lessons/131127
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
코드
-map을 이용할 경우
want를 넣은 map과 discount를 넣은 map에 대해서 같은 key의 value 값에 대해서 비교
실제 개수가 더 크면 answer를 update
import java.util.*;
class Solution {
public int solution(String[] want, int[] number, String[] discount) {
int answer = 0;
Map<String, Integer> map = new HashMap<>();
for(int i=0;i<want.length;i++){
map.put(want[i], number[i]);
}
for(int i=0;i<discount.length-10+1;i++){
Map<String, Integer> smap = new HashMap<>();
for(int j=i;j<i+10;j++){
String name = discount[j];
smap.put(name, smap.getOrDefault(name, 0)+1);
}
boolean available = true;
for(int j=0;j<want.length;j++){
int wantCount = map.getOrDefault(want[j], 0);
int realCount = smap.getOrDefault(want[j], 0);
if(wantCount > realCount){
available = false;
break;
}
}
if(available)
answer++;
}
return answer;
}
}
-array를 이용했을 경우
1. 10개의 범위 내에서 want 배열에 있는값들이 있는지 확인
있으면 array를 update
2. 10개의 범위 내에서 want 배열에 없는 값이 있을 경우에는 다음 원소부터 10개를 시행
3. want 배열의 값이 모두 존재할 경우 실제 개수와 원하는 개수 비교. 실제 개수가 더 크면 answer + 1
class Solution {
public int solution(String[] want, int[] number, String[] discount) {
int answer = 0;
for(int i=0;i<discount.length-10+1;i++){
int arr [] = new int [want.length];
boolean contain = false;
for(int j=i;j<i+10;j++){
String type = discount[j];
for(int k=0;k<want.length;k++){
if(type.equals(want[k])){
arr[k] += 1;
contain = true;
break;
}
}
}
if(!contain) continue;
boolean correct = true;
for(int j=0;j<want.length;j++){
if(number[j] > arr[j]) {
correct = false;
break;
}
}
if(correct) {
answer++;
}
}
return answer;
}
}