-
[코딩테스트] 프로그래머스 - 할인 행사(Java, Level2)코딩테스트/프로그래머스 2022. 11. 22. 00:02728x90
안녕하세요~
오늘볼 문제는 바로 '할인 행사'라는 문제입니다.
다행히 제 혼자 힘으로 풀 수 있었던 문제입니다.
효율성은 좋지 않은듯 하지만 풀었다는것에 감사하며 코드 올립니다.
코드를 만나기전에 문제를 만나보시죠.
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
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[코딩테스트] 프로그래머스 - 소수 찾기(Java, Level2) (0) 2022.12.03 [코딩테스트] 프로그래머스 - 숫자 게임(Java, Level3) (0) 2022.12.03 [코딩테스트] 프로그래머스 - 베스트앨범(Java, Level3) (0) 2022.11.19 [코딩테스트] 프로그래머스 - 조건별로 분류하여 주문상태 출력하기(MySQL, Level3) (0) 2022.11.19 [코딩테스트] 프로그래머스 - 즐겨찾기가 가장 많은 식당 정보 출력하기(MySQL, Level3) (0) 2022.11.19