2020 카카오 인턴십 - 보석 쇼핑
2420 단어 알고리즘JavaScriptJavaScript
07.12 에 푼 문제입니다🌷
보석 쇼핑
function solution(gems) {
const gem = new Set(gems)
const gemcount = gem.size
if(gemcount===1) return [1,1]
if(gemcount===gems.length) return [1,gemcount]
var answer = [];
const results=[]
let min = gems.length
for(let i = 0;i<gems.length;i++){
const count=new Set()
count.add(gems[i])
for(let j=i+1;j<gems.length;j++){
count.add(gems[j])
if(count.size===gemcount) {
if(min>(j-i)) {
answer=[i+1,j+1]
min=(j-i)
}
break
}
}
}
return answer;
}
처음에는 2중 for문으로 풀려고 했으나 효율성 점수가 0점이었다..
function solution(gems) {
let gemsLen = []
const gemset = new Set(gems)
const gemscount = gemset.size
if(gemscount===1) return [1,1]
if(gemscount===gems.length) return [1,gems.length]
const gemsmap = new Map()
for(let i in gems){
gemsmap.set(gems[i],parseInt(i))
if(gemsmap.size===gemscount) {
gemsLen.push([Math.min(...gemsmap.values())+1,parseInt(i)+1])
}
}
gemsLen.sort((a,b)=>(a[1]-a[0])-(b[1]-b[0]))
return gemsLen[0];
}
다시 푼 문제!
map과 set을 이용해서 map에 보석 종류가 모두 들어오면 길이를 gemsLen에 push했다.
효율성에서 몇개의 테스트케이스가 시간초과가 났다.
문제는
Math.min(...gemsmap.values())
때문이었다.
다른 분의 풀이를 참고해서
function solution(gems) {
let gemsLen = []
const gemset = new Set(gems)
const gemscount = gemset.size
if(gemscount===1) return [1,1]
if(gemscount===gems.length) return [1,gems.length]
const gemsmap = new Map()
for(let i in gems){
gemsmap.delete(gems[i])
gemsmap.set(gems[i],parseInt(i))
if(gemsmap.size===gemscount) {
gemsLen.push([gemsmap.values().next().value + 1,parseInt(i)+1])
}
}
gemsLen.sort((a, b) => {
if ((a[1] - a[0]) === (b[1] - b[0])) {
return a[1] - b[1];
}
return (a[1] - a[0]) - (b[1] - b[0]);
});
return gemsLen[0];
}
로 변경하니 성공했다.
Author And Source
이 문제에 관하여(2020 카카오 인턴십 - 보석 쇼핑), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@mlsh1112/2020-카카오-인턴십-보석-쇼핑저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)