-
프로그래머스 할인행사알고리즘 2023. 8. 8. 01:40
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; for(int i=0; i<10; i++){ String[] wants = want; int[] numbers = number; for(int j=i; j<i+10; i++){ for(int k=0; k<wants.length; k++){ if(discount[j]==wants[k]){ numbers[k]--; } } } boolean flag = true; for(int q : numbers){ if(q!=0) flag=false; } if(flag) answer++; } return answer; } }
시간초과가 발생하여 더 좋은 방법이 없나 생각하다 hashmap사용하기로 변경
import java.util.*; class Solution { public int solution(String[] want, int[] number, String[] discount) { int answer = 0; HashMap<String,Integer> map = new HashMap<>(); HashMap<String,Integer> nmap = new HashMap<>(); for(int i=0; i<want.length; i++){ map.put(want[i],number[i]); } for(int i=0; i<10; i++){ nmap = map; for(int j=i; j<i+10; i++){ nmap.put(discount[j],nmap.getOrDefault(discount[j],0)-1); } boolean flag = true; for(String q : nmap.keySet()){ if(map.get(q)!=0) {flag=false;break;} } if(flag) answer++; } return answer; } }
근데 시간초과가 발생한다
그럼 여기서 어떻게 고쳐야하지
i for문의 범위가 잘못됨
jfor문의 조건이 잘못됨
nmap에 map을 집어넣는게 아니라 새로운 map을 파서 nmap과 map의 갯수를 비교해야함
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<want.length; i++){ map.put(want[i],number[i]); } for(int i=0; i<discount.length-10+1; i++){ HashMap<String,Integer> nmap = new HashMap<>(); for(int j=i; j<i+10; j++){ nmap.put(discount[j],nmap.getOrDefault(discount[j],0)+1); } boolean flag = true; for(String q : nmap.keySet()){ if(map.get(q)!=nmap.get(q)){ flag = false; break; } } if(flag) answer++; } return answer; } }
'알고리즘' 카테고리의 다른 글
[java] 프로그래머스 다트 게임 (0) 2023.08.10 [java] 프로그래머스 크레인 인형뽑기 (0) 2023.08.09 [java] 백준 16967 : 배열 복원하기 (0) 2023.08.06 [java] 프로그래머스 두 큐 합 같게 만들기 (0) 2023.08.06 [java] 프로그래머스 lv2 전력망을 둘로 나누기 (0) 2023.08.06