[프로그래머스] 스타수열

adultlee·2023년 6월 14일
1

프로그래머스 3단계

목록 보기
36/39
post-custom-banner

문제 링크

프로그래머스 문제

풀이

첫번째 풀이는 완전탐색을 통해서 구현했습니다.
길이가 2인 집합을 만들면서 교집합의 개수를 구하려고 했습니다.

function solution(a) {
    var answer = 0;
    const SET = [...new Set(a)]
    
    for(let s =0; s< SET.length; s++){
        const NUMBER = SET[s]
        //추가합니다. 
        let Len = 0;
        let UsedIndex = -1;
        for(let i=0; i<a.length; ){
            //console.log(NUMBER , i , UsedIndex , Len)
            if(i===0){
                if(a[i]=== NUMBER){
                    Len+=2;
                    UsedIndex = i+1;
                    i+=2;
                }else{
                    i++
                }
            }else if(i===a.length-1){
                if(a[i]=== NUMBER){
                   if(UsedIndex === i-1|| a[i-1] === NUMBER){//바로 직전꺼 사용
                       break;
                    }else{// 상관 없음
                       Len+=2;
                       UsedIndex = i-1;
                       i+=1; 
                       break;
                    }
                }else{
                  break;
                }
            }else{
                if(a[i]=== NUMBER){
                    if(UsedIndex === i-1|| a[i-1] === NUMBER){//바로 직전꺼 사용
                       Len+=2;
                       UsedIndex = i+1;
                       i+=2; 
                    }else{// 상관 없음
                       Len+=2;
                       UsedIndex = i-1;
                       i+=1; 
                    }
                }else{
                    i++
                }
            }
        }
        console.log(NUMBER , Len)
        answer = Math.max(answer , Len)
    }
    
    return answer   
}

// 순서를 유지해야함
// 길이가 2이상
// 숫자의 종류를 파악한 후 추가한다. 
// 이때 연속하면 안된다. 

계속해서 코드에 문제가 발생했고, 아래 주석에서 기술한것처럼,
문제의 테스트 케이스들이 0 ~ 9 까지인것에 낚여, 결국 범위를 내 스스로 고쳐버렸다.
결국 고쳐주니 정상적으로 기능하는것을 확인했다.

코드

function solution (a) {
  let answer = 0;
 
    const numberCount = new Array(a.length+1).fill(0) // 여기가 중요해... 문제를 잘읽자 멍청구리야
    const SET = []
    
    for(let i=0; i< a.length; i++){
        numberCount[a[i]] +=1;
    }
    for(let i = 0; i< numberCount.length; i++){
        if(numberCount[i] > 0){
            SET.push([i, numberCount[i]])
        }
    }
    SET.sort((a,b) => b[1] - a[1])
    
  for(let i = 0; i < SET.length; i++) {
    if(answer >= SET[i][1]) continue;
    
    let count = 0;
    
    for(let j = 0; j < a.length; j++) {
      if(a[j+1] === undefined) continue;
      if(a[j] === a[j+1]) continue;
      if(a[j] !== SET[i][0] && a[j+1] !== SET[i][0]) continue;
      
      count++;
      j++;
    }
    
    answer = Math.max(answer, count);
  }
  
  return answer * 2;
}
post-custom-banner

0개의 댓글