-
[프로그래머스]보석쇼핑_Java알고리즘문제풀이/프로그래머스 2021. 8. 3. 22:50
--문제--
https://programmers.co.kr/learn/courses/30/lessons/67258
코딩테스트 연습 - 보석 쇼핑
["DIA", "RUBY", "RUBY", "DIA", "DIA", "EMERALD", "SAPPHIRE", "DIA"] [3, 7]
programmers.co.kr
--문제 접근--
문제의 조건
1. 연속적으로 나열된 보석을 모든 종류의 보석을 구매하는 것.
2. 만약 길이가 같다면 번호 순서가 더 낮은걸 출력
문제의 조건 1을 보고 생각해냈던 것이
1번부터 시작해서 1번의 조건을 만족하는 길이를 먼저 찾습니다.
그 이후에 1번부터 하나씩 빼 봤을 때에 1번을 빼봅니다. 그러다가 보석이 1개뿐이라 만약 못 뺄 환경에 있을 때는 조금 더 보석을 찾으러가 봅니다. 이런 식으로 알고리즘을 짜 봤습니다.
그리고 다른 주의할 점은
맨 처음 보석의 개수를 알아내는 점입니다. 이 점의 방법은 hashset 방법과 ArrayList에 중복을 확인하면서 넣는 방법이 있는데 저는 ArrayList의 방법을 사용하였습니다.
조건 2는 최신화를 무조건 길이가 작을 때만 하면 해결이 됩니다.
--코드--
package Level3; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; public class 보석쇼핑 { public static void main(String[] args) { String[] temp= {"A","B","B","B","B","B","B","C","B","A"}; System.out.println(Arrays.toString(solution(temp))); } public static int[] solution(String[] gems) { int[] answer = {0,0}; ArrayList<String> result=new ArrayList<>(); //이과정은 중복을 제거하는 과정.. for(String x :gems) { if(!result.contains(x))result.add(x); } HashMap<String, Integer> hs=new HashMap<>(); int idx=0; //처음부터 끝까지산다고가정했을때 처음으로 조건을 만족하는 길이 구하는과정 돌면서 카운트하는과정 while(true) { if(!hs.containsKey(gems[idx]))hs.put(gems[idx],1); else hs.put(gems[idx],hs.get(gems[idx])+1); if(hs.size()==result.size())break; idx++; } int start=0; int end=idx; int ans_start=0; int ans_end=idx; int ans=idx;//일단은 조건을 만족하는 길이. out: while(end<gems.length) { String temp=gems[start]; //-1해도 0보다크다는건 2개이상 존재하다는 의미. if(hs.get(temp)-1>0) { start++;//-1을해주고 다음을 보러가기. hs.put(temp, hs.get(temp)-1); //답을 최신화해주는 과정 조건에서 길이가 같다면 번호순서대로나열이라 무조건 작은것들만 최신화 if(end-start<ans) { ans_start=start; ans_end=end; ans=end-start; } }//-1했는데 0이라는건 제외하면 안된다는의미니 조금 더 둘러보러가기 else if(hs.get(temp)-1==0) { end++; //여기서 end==gems.length라는건 이미 다보고 없다는 의미 if(end==gems.length)break out; hs.put(gems[end], hs.get(gems[end])+1); } } answer[0]=ans_start+1; answer[1]=ans_end+1; return answer; } }
'알고리즘문제풀이 > 프로그래머스' 카테고리의 다른 글
[프로그래머스]N-Queen_Java (0) 2021.08.07 [프로그래머스]디스크컨트롤_Java (0) 2021.08.07 [프로그래머스]리틀프렌즈사천성_Java (0) 2021.08.01 [프로그래머스]가장먼노드_Java (0) 2021.07.31 [프로그래머스]추석 트래픽_Java (0) 2021.07.31