(Java)프로그래머스 - 할인 행사

윤준혁·2024년 4월 6일

나의 풀이

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++) { // 1
            HashMap<String, Integer> map = new HashMap<>();
            
            for (int j = 0; j < want.length; j++) { // 2
                map.put(want[j], number[j]);
            }
            
            for (int j = i; j < 10 + i; j++) {
                String key = discount[j];
                if (map.containsKey(key)) {
                    int temp = map.get(key);
                    if (temp > 1) { // 3
                        map.put(key, temp - 1);
                    } else {
                        map.remove(key);
                    }
                }
            }
            
            if (map.isEmpty()) answer++; // 4
        }
        
        return answer;
    }
}

과정

  1. 10일 동안 회원 자격을 부여하니까 10일 동안의 할인 상품들을 확인할 때 배열의 범위를 초과하는 것을 방지하기 위한 반복문 조건 설정
  2. map함수에 want와 number를 키 밸류로 가지도록 삽입
  3. discount[j]를 키로 가지는 밸류의 값이 1 이상이라면 -1을 해주고, 아니면 삭제해준다
  4. 반복문이 끝났을 때 map이 비어있다면 answer을 증가

다른 사람 풀이

import java.util.*;

class Solution {
    public int solution(String[] want, int[] number, String[] discount) {
        int answer = 0;
        ArrayList<String> list = new ArrayList<>();

        for (int i=0; i<want.length; i++) {
            while (number[i]-- > 0) {
                list.add(want[i]);
            }
        }

        for (int i=0; i<discount.length-list.size()+1;i ++) {
            ArrayList<String> l = (ArrayList<String>) list.clone();
            for (int j=i; j<i+list.size(); j++) {
                if (l.contains(discount[j])) {
                    l.remove(discount[j]);
                } else {
                    break;
                }
            }
            answer += l.size()==0 ? 1 : 0;
        }

        return answer;
    }
}

0개의 댓글