Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |
Tags
- 싸피
- Proxy Server
- 플로이드 와샬
- 프록시
- 호스팅이란?
- 웹 호스팅
- SSAFY
- 다익스트라 알고리즘
- 프록시서버
- 뮤텍스란?
- Synchronization
- 플로이드 워셜
- 세마포어와 뮤텍스
- 클라우드 서버
- 세마포어란?
- 세마포어
- 뮤텍스
- 다익스트라
- Dijkstra Algorithm
- Proxy
- 호스팅
- 동기화
- 세마포어와 뮤텍스의 차이
- 싸피 합격
- 최단 경로
- 삼성 청년 SW 아카데미
- 싸피 면접 후기
- 서버 호스팅
- floyd-warshall
Archives
- Today
- Total
어제의 나보다 성장한 오늘의 나
[프로그래머스][Level3][Java] 보석 쇼핑 본문
programmers.co.kr/learn/courses/30/lessons/67258
문제풀이
gems 배열의 크기가 100,000이하 이기때문에 2중 반복문으로 못 풀어서 다른 방향으로 풀려고 노력하였다.
먼저 보석 갯수를 알아야한다. HashSet으로 보석의 갯수를 구한다.
그리고 따로 각 보석의 이름을 Key로 가지고 Value로는 가장 최근 자리를 저장하는 HashMap을 만든다.
길이는 보석의 최소자리와 최대 자리의 +1이 길이이고 저장된 Value에서 Min과 Max를 구해서 길이를 구한다.
마지막으로 최소자리의 보석을 삭제 시켜주고 그 보석이 나타날때 다시 위와 같이 반복한다.
최소자리( 맨 먼저 시작되는 보석 )를 삭제시켜주는 이유는 예시로
["DIA", "RUBY", "RUBY", "DIA", "DIA", "EMERALD", "SAPPHIRE", "DIA"] 길이는 5이기만
마지막 "DIA"가 "RUBY"가 되면 최소 길이는 4가 되기때문에 위와 같은 상황을 최소자리만 삭제 시키고 다시 저장되었을때 구하면 되기 때문이다.
코드
import java.util.*;
class Solution {
public int[] solution(String[] gems) {
int[] answer = new int[2];
Set<String> gemCheck = new HashSet<>();
//보석 종류 확인
for(int i=0; i<gems.length; i++){
gemCheck.add(gems[i]);
}
//보석 종류 갯수
int gemNum = gemCheck.size();
gemCheck.clear();
HashMap<String, Integer> gemDisplay = new HashMap<>();
int gemLength = Integer.MAX_VALUE;
for(int i=0; i<gems.length; i++){
gemDisplay.put(gems[i], i+1);
// 모든 종류가 확인 될 때
if(gemDisplay.size() == gemNum){
int min = Integer.MAX_VALUE;
int max = 0;
String minKey = "";
// 진열된 보석 전시 길이
for(String key : gemDisplay.keySet()) {
if (gemDisplay.get(key) < min){
min = gemDisplay.get(key);
minKey = key;
}
max = Math.max(max, gemDisplay.get(key));
}
gemDisplay.remove(minKey);
if(max-min+1 < gemLength){
gemLength = max-min+1;
answer[0] = min;
answer[1] = max;
}
}
}
return answer;
}
}
'알고리즘 > 프로그래머스(Programmers)' 카테고리의 다른 글
[프로그래머스][Level2][Java] 점프와 순간 이동 (0) | 2021.01.02 |
---|---|
[프로그래머스][Level3][Java] 멀리 뛰기 (0) | 2021.01.01 |
[프로그래머스][Level3][Java] 여행경로 (0) | 2020.12.30 |
[프로그래머스][Level2][Java] JadenCase 문자열 만들기 (0) | 2020.12.30 |
[프로그래머스][Level2][Java] 수식 최대화 (0) | 2020.12.29 |
Comments