2020 카카오 인턴십 - 보석 쇼핑

이서현·2021년 7월 12일
0

Algorithm

목록 보기
49/76

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];
}

로 변경하니 성공했다.

profile
안녕하세요. 이서현입니다( ღ'ᴗ'ღ )

0개의 댓글