본문 바로가기

알고리즘

프로그래머스 > 카카오 개발자 겨울 인턴십 > 튜플

728x90

https://school.programmers.co.kr/learn/courses/30/lessons/64065

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

[나의코드]

  const stringToArray=(string)=>{
    let tempArray = string.substring(2,string.length-2).split("{").join("").split("}")
    //string값들을 배열로 "{""}" 제거하고 배열로 변경(","} 살아있음 
    let array=[]
    
    for(i=0;i<tempArray.length;i++){
      array.push(tempArray[i].split(","))
    }
    // "," 기준으로 배열 내의 원소들 분리

    for(i=0;i<array.length;i++){
      if(array[i][0]===""){
        array[i].shift()
      }
    }
    // 맨앞의 "," => 삭제 처리  
    return array
} 
 //"{{1,2,3},{2,1},{1,2,4,3},{2}}" => [ [ '1', '2', '3' ], [ '2', '1' ], [ '1', '2', '4', '3' ], [ '2' ] ]
  
  const arrangeAccordToLength = (array) =>{
    return array.sort((x,y)=>x.length-y.length)
  }
  //[ [ '1', '2', '3' ], [ '2', '1' ], [ '1', '2', '4', '3' ], [ '2' ] ]=> [ [ '2' ], [ '2', '1' ], [ '2', '1', '3' ], [ '2', '1', '3', '4' ] ] =>


const solution=(test)=>{
  let array = arrangeAccordToLength(stringToArray(test))
  let answer=[]
  for(i=0;i<array.length;i++){
    for(j=0;j<array[i].length;j++){
      if(!answer.includes(+array[i][j])){
         answer.push(+array[i][j])
        break;
      }
    }
  }
    // answer에서 배열의 각 항목중 포함하고 있지 않은 항목을 더해줌
  return answer

}

text들을 내가 원하는 방식대로 배열로 변경하는 과정이 생각보다 시간이 오래걸렸고, 좀 더 간단히 저 과정을 구현하면 좋지 않을까라는 아쉬움이 든다. 원소의 길이에 따라 정렬시킨 후 빈 배열로 초기 설정된 answer에 배열의 첫번째 항목을 넣는다. 이후로 두번째 항목을 탐색할 때 answer에 포함되지 않는 항목들을 추가하는 아이디어는 마음에 든다.(하지만 2중 for문이 돌아 시간복잡도가 클거 같은데 테스트 자체는 통과로 떴다...)

728x90