https://school.programmers.co.kr/learn/courses/30/lessons/131127
문제를 잘 읽어야 한다.... 처음에 회원가입 한 날이 며칠째인지를 구해서 자꾸 틀렸다. 이렇게 풀어도 테스트 코드는 맞게 나오는데, 정답만 맞지 않게 나와서 틀린 부분을 찾는 데 시간이 많이 소요됐다ㅠㅠ
문제는 해시맵 두 개를 이용하여 풀었다. 시작일로부터 10일 전 까지의 모든 경우를 구해 새로운 해시맵에 저장한 후, 원래의 해시맵과 일치하면 정답 일수를 1 늘려주는 식으로 구현하였다.
이 때, 해시맵의 비교는 간단히 equals를 사용하면 된다.
import java.util.*;
class Solution {
public int solution(String[] want, int[] number, String[] discount) {
//want : 원하는 제품
//number : 제품 수량
//discount : 할인 제품
HashMap<String, Integer> map = new HashMap<>(); //원하는 제품과 수량을 담은 해시맵
int answer = 0;
int w = number.length;
int buyDays = 0;
for(int i=0; i<w; i++){ //원하는 제품과 수량을 담는 반복문
map.put(want[i], number[i]);
buyDays = buyDays + number[i];
}
//10일간을 비교했을 때 map에 들어있는 상품의 개수와 같으면 그 시작일이 정답
//세일은 10일동안 함
int d = discount.length;
for(int i=0; i<=d-10; i++){ //시작일. 범위를 초과하지 않도록 10을 빼 주어야 함
HashMap<String, Integer> buyMap = new HashMap<>();
for(int j=i; j<i+10; j++){ //시작일로부터 10일간 탐색
if(buyMap.containsKey(discount[j])){ //이미 종목이 있으면
buyMap.put(discount[j], buyMap.get(discount[j])+1); //개수 1 증가
}else{ //종목이 없으면
buyMap.put(discount[j], 1);
}
}
//종목을 하나씩 나눈 후에 처음 값과 같으면
if(buyMap.equals(map)){
answer++;
}
}
return answer;
}
}