* 순서
- 문제
- 문제 설명
- 문제 목표
- 문제 풀이
- 최종 코드
- 포인트
- 다른 사람 코드
- 문제
- 문제 설명
원하는 제품, 원하는 제품의 개수가 있다. 마트에서 매일 한 제품을 할인하는데 하나씩만 구매할 수 있다.
10일 연속으로 할인 제품을 구매할 수 있는 날짜의 수를 구한다.
제품을 구매할 수 없으면 0을 return한다.
- 문제 목표
10일 연속으로 할인 제품을 구매할 수 있는 날짜의 수를 구한다.
- 문제 풀이
1. 원하는 제품과 원하는 제품의 수를 wMap에 저장한다.
2. 연속해서 할인 제품 구매할 수 있는 날짜를 세야하니 길이를 다음과 같이 정해서 for문을 돌린다.
3. 할인하는 제품과 개수를 dMap에 저장한다.
4. 할인하는 제품의 개수와 원하는 제품의 개수를 비교한다.
5. 개수가 일치하면 answer를 1씩 증가한다.
- 최종 코드
public static int solution(String[] want, int[] number, String[] discount) {
int answer = 0;
Map<String, Integer> wMap = new HashMap<>();
//1. 원하는 제품과 원하는 제품의 수를 wMap에 저장한다.
for(int i = 0; i < want.length; i++) {
wMap.put(want[i], number[i]);
}
int consecutiveDays = 10;
//2. 연속해서 할인 제품 구매할 수 있는 날짜를 세야하니 길이를 다음과 같이 정해서 for문을 돌린다.
for (int i = 0; i < discount.length - consecutiveDays + 1; i++) {
Map<String, Integer> dMap = new HashMap<>();
//3. 할인하는 제품과 개수를 dMap에 저장한다.
for (int j = 0; j < consecutiveDays; j++) {
dMap.put(discount[i + j], dMap.getOrDefault(discount[i + j], 0) + 1);
}
Boolean wantNumberExist = true;
//4. 할인하는 제품의 개수와 원하는 제품의 개수를 비교한다.
for(String key : wMap.keySet()) {
if(wMap.get(key) != dMap.get(key)) {
wantNumberExist = false;
break;
}
}
//5. 개수가 일치하면 answer를 1씩 증가한다.
if(wantNumberExist) {
answer++;
}
}
return answer;
}
- 포인트
맵 2개 사용한다
for문 사용시 인덱스 값을 i+j를 이용함으로 원하는 인덱스부터 문제에서 원하는 인덱스까지 구할 수 있게 한다.
- 다른 사람 코드
3중 for문을 돌려서 구했다.
List를 사용했다.
'Algorithm' 카테고리의 다른 글
[프로그래머스 Java] 예상대진표 Lv.2 (0) | 2023.09.19 |
---|---|
[프로그래머스 Java] 올바른 괄호 Lv.2 (0) | 2023.09.12 |
[프로그래머스 Java] 최소값 만들기 Lv.2 (0) | 2023.09.11 |
[프로그래머스 Java] JadenCase 문자열 만들기 Lv.2 (0) | 2023.09.05 |
[프로그래머스 Java] 추억 점수 Lv.1 (0) | 2023.09.05 |
댓글