https://school.programmers.co.kr/learn/courses/30/lessons/131127
설명
처음 이 문제를 풀이했을 때 배열 비교를 이용해서 풀이했는데, 해시맵 두 개를 활용하여 간단하게 풀이하는 방법도 있어 작성한다.
- 해시맵 map을 선언하여 want와 number 배열에서 목표하는 할인 정보(제품명, 수량)을 저장한다.
- (discount 배열을 탐색하여)에서 시작일마다 dMap을 선언해 10일간의 한일 정보를 저장한다.
- 생성된 dMap과 map을 비교하여, 수량이 다르면 isIdentical 변수를 false로 지정한다.
- 두 해시맵이 동일하면 answer를 증가한다.
코드
class Solution {
public int solution(String[] want, int[] number, String[] discount) {
int answer = 0;
Map<String, Integer> map = new HashMap<>();
// 내가 목표로 하는 map
for(int i = 0; i < want.length; i++) {
map.put(want[i], number[i]);
}
for(int i = 0; i < discount.length - 10 + 1; i++) {
Map<String, Integer> dMap = new HashMap<>();
for(int j = 0; j < 10; j++) {
dMap.put(discount[i + j], dMap.getOrDefault(discount[i+j], 0) + 1);
}
Boolean isIdentical = true;
for(String key : map.keySet()){
if(map.get(key) != dMap.get(key)) {
isIdetical = false;
break;
}
}
answer += isIdentical ? 1 : 0;
}
return answer;
}
}
Reference
반응형