프로그래머스 할인행사[자력]

작성자 : 조회수 :

소모시간 : 2시간

 

문제 풀이 방법은

 

처음 QUEUE 를 생각했습니다 큐로 데이터를 쌓아두고 큐의 길이만큼 반복해서

정답 리스트와 답이 같게 하면 됩니다.

 

헷갈린 부분은 효율성 테스트가 있는 줄 알고 효율성까지 생각하다보니 시간이 많이 걸렸던 것 같습니다.

 

아이디어는 이렇습니다. 참고해주세요

 

 

코드입니다


package Question;

import java.util.*;

/**

 * 프로그래머스 할인행사

 *

 * 1. 배열 갯수가 10만개 일때 이미 이중 for문은 안된다고 확인

 * 2. 문제를 읽어보았을땐 queue 자료구조 방식이 적절하다고 생각이 들었음.

 *

 * */

public class DiscountEvent {

    public static void main(String[] args) {

        String[] want = new String[]{"banana", "apple", "rice", "pork", "pot"};

        int[] number = new int[]{3, 2, 2, 2, 1};

        String[] discount = new String[]{"chicken", "apple", "apple", "banana", "rice", "apple", "pork", "banana", "pork", "rice", "pot", "banana", "apple", "banana"};

        System.out.println(solution(want,number,discount));

    }

    // number 합을 더하자

    // 맞는게 있으면 +1 해주고 없다면 -1 해주자

    // 0 된다면 바로 끝내자 answer 반환해서

    public static int solution(String[] want, int[] number, String[] discount) {

        int answer = 0;

        int day = 1;

        Queue<String> queue = new LinkedList<>();

        HashMap<String, Integer> hash = new HashMap<>(); // 인덱스를 저장해줌

        int[] answerInt;

        for (int i = 0; i < want.length; i++) {

            hash.put(want[i], i);

        }

        for (int i = 0; i < discount.length; i++) {

            if(queue.size() > 9){

                String p = queue.poll();

            }

            // 등록, 빼기

            queue.offer(discount[i]);

            if(queue.size() == 10){

                answerInt = new int[number.length];

                for (String q : queue){

                    if(hash.containsKey(q)){

                        answerInt[hash.get(q)] += 1;

                    }

                }

                System.out.println(queue);

                System.out.println(Arrays.toString(answerInt));

                System.out.println(Arrays.toString(answerInt));

                if(Arrays.equals(number, answerInt)){

                    answer++;

                }

            }

        }

        System.out.println(queue);

        return answer;

    }

}