티스토리 뷰

1. 문제

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

 

프로그래머스

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

programmers.co.kr

 


 

2. 문제 풀이 겸 회고

 

난독증이 있다면.... 나임 진짜로.. 이게 안될 리가 없는데.. 예제 TC는 맞는데 자꾸 제출하면 11번 빼고 다 틀렸습니다... 진짜 너무 짜증 나서 눈물을 머금고....ㅜㅗㅜ

보니깐 그냥 내가 잘못했다.. 문제에서 요구하는 답은 회원등록시 모두 할인받을 수 있는 총날짜의 수인데.. 난 처음으로 나오는 날짜 출력하는 줄 알고.. 계속 그것만 출력했다..

내가 로직이 잘못이 있었나.. 계속 계속 print 찍어가면서 디버깅해봤는데.. 진짜... 결과적으로는 문제에서 요구하는 답을 출력하지 않았다... 진짜 OMG..ㅎ...

 

 

이제 로직에 대해 설명하자면

우선 HashMap 자료구조를 이용했다! {키- 물품, 벨류 - 해당 개수}  이런식으로 이용했다. 
{want[i] = 키값, number[i] = value값}

그리고 discount 배열 돌면서 여기서도 hashmap 자료구조를 사용했다.
2중 for문 돌면서 0~9, 1~10 이렇게 discount 배열 범위 넘어가지 않도록 돌면서 또 다른 hashmap에 값을 넣어줬다.

정현이가 원하는 정보가 들어있는 hashmap 과 10개씩 넣어준 hashmap 사이즈가 같을 경우라는 조건을 주었다.
이유는 정현이가 원하는 정보 hashmap 안에 10개씩 넣어준 hashmap이 포함되어 있을 수 있거나 10개 hashmap이 정현이 정보를 포함하고 있을 경우에도 정답처리를 해주는 로직이 포함되어있기 때문이다.

이럴 경우일 때를 대비해서


10개 씩 넣어준 hashmap 키값을 돌면서 원하는 hashmap 정보랑 같고(containsKey 사용)  혹여나 같은 정보가 있다 해도 개수가 다를 경우에는 더 이상 볼 필요 없으니깐 continue 해줬다.

만약 조건에 걸림없이 for문을 통해 다 돌았다면.. 이건 정현이가 할인받을 수 있는 정보와 일치하므로 Count를 세어줬다!


 

3. 코드

import java.util.*;

class Solution {

    public int solution(String[] want, int[] number, String[] discount) {
        int answer = 0;
        HashMap<String, Integer> map = new HashMap<>();
        for(int i=0;i<number.length;i++){
            map.put(want[i],number[i]);
        }
    
        a:for(int i=0;i<discount.length;i++){
            if(i+10> discount.length) break;
            
            HashMap<String, Integer> hm = new HashMap<>();
            for(int j=i;j<i+10;j++){
                hm.put(discount[j],hm.getOrDefault(discount[j],0)+1);
            }

            if(hm.size() == map.size()){
                for(String s: hm.keySet()){
                    if(!map.containsKey(s) || map.get(s)!= hm.get(s)){
                        continue a;
                    }
                }
                answer++;
            }
        }
        
        return answer;
    }
}

 

피드백은 언제나 환영입니다 :) 🌳

댓글