튜플

김현민·2021년 10월 22일
0

Algorithm

목록 보기
107/126
post-thumbnail

코드

function solution(s) {
  var answer = []
  let t = []
  t = [...s.split("}").filter((v) => v !== "")]

  let gg = t.map((v) => {
    if (v.includes("{")) {
      return v.replace("{", "").substring(1)
    }
  })

// 각 요소의 길이를 담는 배열 (대조를 위해)
  let lengthElement = []
  gg.map((v) => {
    return lengthElement.push(v.length)
  })

  while (gg.length !== 0) {
    
    // 길이가 가장 작은 요소를 타겟팅
    let target = lengthEl.indexOf(Math.min(...lengthEl))

    // answer배열에 그 요소를 담는다
    answer.push(gg[target])

    // 요소를 담음과 동시에 삭제
    gg.splice(target, 1)
    lengthEl.splice(target, 1)
  }

  let res = answer.map((v) => {
    return v.split(",")
  })
  
  // 비교하면서 넣을 스택
  let ans = []

  for (let i = 0; i < res.length; i++) {
    for (let j = 0; j < res[i].length; j++) {
      // 맨 첫째요소는 무조건 넣는다.
      if (i === 0 && j === 0) {
        ans.push(res[i][i])
        continue
      }
      
      let put = res[i][j]
      
      // 이미 있거나, 맨 위의 요소가 넣을 요소랑 같을 경우 continue
      if (ans.includes(put) || put === ans[ans.length - 1]) {
        continue
      } else {
        ans.push(put)
      }
    }
  }
  
  // 숫자 타입으로 변환
  return ans.map((v) => Number(v))
}

// solution(s)

// solution("{{2},{2,1},{2,1,3},{2,1,3,4}}")
// solution("{{1,2,3},{2,1},{1,2,4,3},{2}}")
solution("{{20,111},{111}}")
// solution("{{123}}")
// solution("{{4,2,3},{3},{2,3,4,1},{2,3}}")

✏️ 풀이

  1. 입력 자료형이 Object자료형이 아니라 string형태로 되어 있어서, {를 지워주고 ,를 기준으로 split해 배열로 만들었다.

  2. 그리고 중복이 존재하지 않으므로 요소 길이가 작은 것들부터 넣는다.

  3. 다음 넣을 요소가 이미 넣어진 요소와 중복한다면 그 요소는 SKIP한다.

sort((a,b)=>a.length - b.length )) 이 방법을 생각했었는데, 다시 해봐야겠다.

profile
Jr. FE Dev

0개의 댓글