https://school.programmers.co.kr/learn/courses/30/lessons/131127
10일 동안 원하는 제품과 수량이 할인하는 날짜가 일치하는 경우를 찾는다
그런 경우가 몇일인지를 찾는 문제
HashMap<String, Integer> map = new HashMap<>();
HashMap<String, Integer> answer_map = new HashMap<>();
for (int i = 0; i < want.length; i++) {
answer_map.put(want[i], number[i]);
}
for (int i = 0; i < 10; i++) {
if (!map.containsKey(discount[i])) {
map.put(discount[i], 1);
} else {
map.put(discount[i], map.get(discount[i])+1);
}
}
HashMap을 이용, 먼저 원하는 물건 리스트와 수량을 answer_map에 넣어주었다
그리고 할인 목록인 discount의 1~10일까지의 물건들을 map에 물건, 수량식으로 넣어주었다
private int getAnswer(String[] want, int answer, HashMap<String, Integer> map, HashMap<String, Integer> answer_map) {
for (int i = 0; i < want.length; i++) {
if (!Objects.equals(map.get(want[i]), answer_map.get(want[i]))) break;
else if (i == want.length-1 && Objects.equals(map.get(want[i]),answer_map.get(want[i]))) {
answer++;
}
}
return answer;
}
그다음 원하는 물건의 수량과 할인하는 수량이 같은지를, 그리고 모든 물건이 할인 가능하다면 조건에 맞으므로 answer를 증가시켰다
private void putOnMap(String[] discount, HashMap<String, Integer> map, int n) {
if (!map.containsKey(discount[n])) {
map.put(discount[n], 1);
map.put(discount[n-10], map.get(discount[n-10])-1);
return;
} else {
map.put(discount[n], map.get(discount[n])+1);
map.put(discount[n-10], map.get(discount[n-10])-1);
return;
}
}
그런 다음 11일 차의 할인하는 물건을 map에 넣고 1일의 물건을 빼주는 식으로 map을 수정하였다
while (n != discount.length) {
putOnMap(discount, map, n);
answer = getAnswer(want, answer, map, answer_map);
n++;
}
그렇게 계속 반복하여 조건에 맞는 경우 answer를 증가시키고 정답을 출력하였다
아래는 전체 코드
import java.util.HashMap;
import java.util.Objects;
class Solution {
public int solution(String[] want, int[] number, String[] discount) {
int answer = 0;
HashMap<String, Integer> map = new HashMap<>();
HashMap<String, Integer> answer_map = new HashMap<>();
for (int i = 0; i < want.length; i++) {
answer_map.put(want[i], number[i]);
}
for (int i = 0; i < 10; i++) {
if (!map.containsKey(discount[i])) {
map.put(discount[i], 1);
} else {
map.put(discount[i], map.get(discount[i])+1);
}
}
answer = getAnswer(want, answer, map, answer_map);
int n = 10;
while (n != discount.length) {
putOnMap(discount, map, n);
answer = getAnswer(want, answer, map, answer_map);
n++;
}
return answer;
}
private int getAnswer(String[] want, int answer, HashMap<String, Integer> map, HashMap<String, Integer> answer_map) {
for (int i = 0; i < want.length; i++) {
if (!Objects.equals(map.get(want[i]), answer_map.get(want[i]))) break;
else if (i == want.length-1 && Objects.equals(map.get(want[i]),answer_map.get(want[i]))) {
answer++;
}
}
return answer;
}
private void putOnMap(String[] discount, HashMap<String, Integer> map, int n) {
if (!map.containsKey(discount[n])) {
map.put(discount[n], 1);
map.put(discount[n-10], map.get(discount[n-10])-1);
return;
} else {
map.put(discount[n], map.get(discount[n])+1);
map.put(discount[n-10], map.get(discount[n-10])-1);
return;
}
}
}
'Programmers' 카테고리의 다른 글
[프로그래머스][JAVA]Lv. 2 - 숫자 카드 나누기 (0) | 2024.01.31 |
---|---|
[프로그래머스][JAVA]Lv. 2 - 혼자 놀기의 달인 (0) | 2024.01.31 |
[프로그래머스][JAVA]Lv. 2 - 두 큐 합 같게 만들기 (0) | 2024.01.14 |
[프로그래머스][JAVA]Lv. 2 - k진수에서 소수 개수 구하기 (0) | 2024.01.14 |
[프로그래머스][JAVA]Lv. 2 - n^2 배열 자르기 (0) | 2023.12.10 |