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

mul·2023년 3월 6일
0

코딩테스트연습

목록 보기
35/56

🔒 문제

프로그래머스 Lv.2 연습문제 할인 행사

🔑 해결

정현이가 원하는 제품을 나타내는 문자열 배열 want와 정현이가 원하는 제품의 수량을 나타내는 정수 배열 number, XYZ마트에서 할인하는 제품을 나타내는 문자열 배열 discount가 주어졌을 때, 회원등록시 정현이가 원하는 제품을 모두 할인 받을 수 있는 회원등록 날짜의 총 일수를 return하는 solution 함수를 작성하는 문제이다.

HashMap을 사용하여 풀 수 있는 문제였다. HashMap형의 map의 key에는 want배열에 저장된 '제품이름'을 저장하고 value에는 number배열에 저장된 '원하는 제품의 수량'을 저장한다. for문을 통해 열흘동안 할인하는 제품이 map에 key값으로 존재하는지 확인한 후에 해당 키 값에 저장된 value에서 -1을 한다. for문이 끝난 후에 다시 '제품이름'을 검색하여 값이 0이 아니라면 모두 할인 받을 수 없다고 판단한다. '제품이름'을 검색한 값이 모두 0이라면 answer에 1을 더하고, map에 다시 '원하는 제품의 수량' 값을 넣어주고 다음 날을 탐색하였다.

  1. HashMap형의 map 생성
  2. for문을 통에 map의 key, value에 각각 want[i], number[i]를 저장
  3. discount의 length에 10을 뺀 값 이하만큼 for문을 돌려서 시작날짜를 탐색
  4. 시작날짜(i)부터 열흘간을 탐색하기 위해 반복문 사용
  5. 만약 map에 j날 할인하는 제품(discount[j])를 Key값으로 갖는 데이터가 있다면, 해당 키값의 데이터에서 -1
  6. 원하는 제품을 모두 할인받을 수 있어 회원가입해도 되는 날을 찾았는지에 대한 여부를 판단하기 위해 boolean형의 find를 true로 초기화
  7. want에 저장된 제품이름을 map에서 탐색하여 저장된 value값이 0이 아니라면 find에 false 저장하고 반복문을 빠져나온다
  8. 반복문이 끝났을 때 find값이 true라면 회원가입을 해도 되는 날로 판단하고 answer++
  9. map에 다시 number[j]값을 저장

🔓 코드

import java.util.HashMap;
import java.util.Map;
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; i++) {
			for (int j = i; j < i + 10; j++) {
				if (map.containsKey(discount[j])) {
					map.put(discount[j], map.get(discount[j]) - 1);
				}
			}
			boolean find = true;
			for (int j = 0; j < want.length; j++) {
				if (map.get(want[j]) != 0) {
					find = false;
					break;
				}
			}
			if (find) {
				answer++;
			}
			for (int j = 0; j < want.length; j++) {
				map.put(want[j], number[j]);
			}
		}

		return answer;
    }
}

0개의 댓글