본문 바로가기
알고리즘/문제 풀이

프로그래머스. 할인 행사

by 위대한초밥V 2023. 10. 2.

https://school.programmers.co.kr/learn/courses/30/lessons/131127

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

설명

처음 이 문제를 풀이했을 때 배열 비교를 이용해서 풀이했는데, 해시맵 두 개를 활용하여 간단하게 풀이하는 방법도 있어 작성한다.

  • 해시맵 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

https://maicoding.tistory.com/49

반응형