반응형
문제 출처
https://school.programmers.co.kr/learn/courses/30/lessons/67258
시간 초과 코드
function solution(gems) {
let set = [...new Set(gems)];
let n = set.length;
for(let i=n; i<=gems.length; i++){
let sIdx = 0;
while(sIdx+i <= gems.length){
if(check(gems.slice(sIdx, sIdx+i), set)) return [sIdx+1, sIdx+i]
sIdx++;
}
}
}
function check(arr,set){
if([...new Set(arr)].length === set.length) return true;
else return false;
}
Map 객체 사용
function solution(gems) {
let answer = [1,gems.length];
const minGemsNum = new Set(gems).size;
const gemMap = new Map();
for(let i=0; i<gems.length; i++){
gemMap.delete(gems[i]);
gemMap.set(gems[i],i);
if(gemMap.size===minGemsNum){
const cand = [gemMap.values().next().value+1, i+1];
if(answer[1]-answer[0]>cand[1]-cand[0]) answer=cand;
}
}
return answer;
}
카카오 공식 문제 풀이
function solution(gems) {
let answer = [1,gems.length];
const minGemsNum = new Set(gems).size;
let l=0, r=0;
const gemMap = new Map();
gemMap.set(gems[0], 1);
while(r < gems.length){
if(gemMap.size===minGemsNum){
if(answer[1]-answer[0]>r-l) answer=[l+1,r+1];
gemMap.set(gems[l], gemMap.get(gems[l])-1);
if(gemMap.get(gems[l])===0) gemMap.delete(gems[l]);
l++;
}else{
r++;
const right = gemMap.get(gems[r]);
gemMap.set(gems[r], right ? right+1:1);
}
}
return answer;
}
반응형
'알고리즘 문제 풀기' 카테고리의 다른 글
프로그래머스: 다단계 칫솔 판매 - javascript(구현 및 dfs) (0) | 2024.05.12 |
---|---|
프로그래머스: 징검다리 건너기 - javascript(이분탐색) (0) | 2024.05.08 |
프로그래머스: 불량 사용자 - javascript(정규식, 완전탐색(dfs), 중복제거 Set) (0) | 2024.05.06 |
프로그래머스: 순위 검색 - javascript(조합, 이진탐색, 그리디) (0) | 2024.04.29 |
프로그래머스: 문자열 압축 - javascript(반복문 관건) (0) | 2024.04.24 |