[JAVA] 할인 행사
< 풀이 >
class Solution {
static public int solution(String[] want, int[] number, String[] discount) {
int answer = 0;
for(int i=0;i<discount.length-9;i++) {
int j;
for(j=0;j<want.length;j++) {
int check=0;
for(int k=i;k<i+10;k++) {
if(discount[k].equals(want[j])) check++;
}
if(check<number[j]) {
break;
}
}
if(j==want.length) answer ++;
}
return answer;
}
}
✏️ 풀이 방법
- 전체 반복 횟수를 지정한 반복문 ① ( 첫째날에 등록했을 때 , 둘째날에 등록했을 때 .. )
: 원하는 제품을 도는 반복문 ②
=> 현재 원하는 제품이 "banana" 일 때
: 할인하는 제품 중 원하는 제품의 개수를 세는 반복문 ③
=> 반복문을 돌며 "banana"의 개수를 구한다.
=> 만약 바나나의 개수가 내가 원하는 바나나의 수량보다 작을 경우 해당 반복문 종료, 다음 날짜로 넘어간다.
=> j가 want.length와 같다는 말은 즉, 원하는 상품의 개수를 늘 충족했기 때문에 반복문이 중간에 종료되지 않았다는 뜻이므로
정현이가 원하는 제품을 모두 할인 받을 수 있는 회원등록의 날짜를 세는 answer 변수의 값을 증가시킨다.
✍🏻 느낀점
정말 나는 3중 반복문에 약하다.. 이 문제를 처음 풀다가 너무 복잡해져서 다른 사람의 풀이를 통해 해결했는데, 제일 밖에 있는 반복문을 왜 i<discount.length-9 이렇게 하는지 이해가 안갔다. 생각해보니 , 문제에서 정현이가 원하는 제품과 수량이 할인하는 날짜와 10일 연속 일치할 경우에 맞춰서 회원가입을 하려고 하기 때문에 ,인덱스 1(i)부터 시작이라고 한다면 인덱스 10(i+9)까지의 할인 물품을 확인해야한다. 즉 i+9<discount.length 인 경우에만 회원 등록이 가능하다!! 만약 discount의 길이가 14라고 했을 때 회원 등록을 할 수 있는 날짜는 0,1,2,3,4 이므로 첫째 날부터 다섯째 날까지이다. 이 5개의 날짜 경우 중에서 정현이가 원하는 제품을 모두 할인받을 수 있는 날짜를 구하는 것이 문제가 원하는 것..! 문제의 길이에 당황하지 말고 찬찬히 해석하고 생각해보는 것이 필요한 것 같다.