반응형
Notice
Recent Posts
Recent Comments
Link
«   2026/02   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
Archives
Today
Total
관리 메뉴

욱꾸미의 주꾸미 발

[코딩테스트] 프로그래머스 - 할인 행사(Java, Level2) 본문

코딩테스트/프로그래머스

[코딩테스트] 프로그래머스 - 할인 행사(Java, Level2)

욱꾸미 2022. 11. 22. 00:02
반응형

안녕하세요~

오늘볼 문제는 바로 '할인 행사'라는 문제입니다.

 

다행히 제 혼자 힘으로 풀 수 있었던 문제입니다.

효율성은 좋지 않은듯 하지만 풀었다는것에 감사하며 코드 올립니다.

 

코드를 만나기전에 문제를 만나보시죠.

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

 

프로그래머스

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

programmers.co.kr

 

해당문제입니다.

코드를 보여드리고 제가 생각한 로직을 적어볼까합니다.

import java.util.*;

class Solution {
    public int solution(String[] want, int[] number, String[] discount) {
        int answer = 0;
        int length=0;
        Map<String, Integer> wantmap=new HashMap<>();
        List<String> disList=new ArrayList<>();
        
        //want와 number를 조합해 hashmap 만들어주기
        for(int i=0;i<number.length;i++)
            wantmap.put(want[i],number[i]);
        
        for(int i=0;i<10;i++)
            disList.add(discount[i]);
            
        
        for(int i=10;i<=discount.length;i++)
        {
            boolean checker=true;
            for(String key:wantmap.keySet())
            {
                int compare1=wantmap.get(key);
                int compare2=Collections.frequency(disList,key);
                if(compare1>compare2)
                {
                    checker=false;
                    break;
                }
            }
            if(checker==true)
                answer++;
            if(i==discount.length)
                break;
            disList.remove(0);
            disList.add(discount[i]);
        }
        return answer;
    }
}

① 먼저 HashMap을 통해 필요한 물품과 수량을 정리했습니다. hashmap의 getOrDefault는 정말 편리하네요

② 문제에서 나오듯 10일동안 회원유지가 됩니다. 그렇기에 먼저10개의 리스트를 받고 0번째를 빼고 다음 리스트의 물품을 넣어 기존에 만든 hashmap과 수량비교를 해볼 예정입니다.

③ 비교하는 로직입니다. 먼저10개의 품목을 넣어놨기에 비교 후 0번째 요소제거, 그리고 새로운 요소 추가순서의 로직으로 시작했습니다. 이런식으로하면 단점으로 마지막 요소가 추가만되고 비교를하지 않아 한번 더 돌되 비교까지만 하고 종료하도록 만들었습니다.

④ 그리고 hash key를 반복문을 통해 돌면서 hash에 저장한 수량과 list에 저장된 특정 물품의 수량을 비교합니다. Collections.frequency라는 문법을 처음 사용해봤는데 신기하네요~ 알아둬야겠습니다.

⑤ 만약하나라도 수량이 적다면 회원가입을 할 이유가 없기에 바로 break로 종료시킵니다.

 

이상으로 오늘의 코딩테스트 문제 마무리하겠습니다.

날씨가 점점추워지네요. 모두 감기조심하시길 바랍니다. :D

반응형