[프로그래머스 lev2/JS] 튜플

woolee의 기록보관소·2022년 10월 25일
0

알고리즘 문제풀이

목록 보기
19/178

문제 출처

프로그래머스 lev2 - 튜플

문제

나의 풀이

// 1. 주어진 튜플 문자열을 배열로 변경
==>
다음엔 JSON.parse(s.replace(/{/g, '[').replace(/}/g, ']')) 써보기..

// 2. sort를 통해 길이에 따른 오름차순 정렬

// 3. str 배열을 순회하면서 answer에 있으면 스킵하고 없으면 넘기도록 하면 정렬한 순서대로 담기므로 정답을 도출할 수 있다.
==>
다음엔 reduce, concat, filter, includes로 풀어보기

function solution(s) {
  let str=[];
  let tmp=[];
  let ps=false;
  for (let i=0; i<s.length; i++) {
    if (!isNaN(s[i])) ps=true;
    if (s[i]=='}') {
      ps=false;
      if (tmp.length > 0) { str.push(tmp.slice()); }
      tmp.length=0;
    }
    if (ps==true) tmp.push(s[i]);
  }

  for (let i=0; i<str.length; i++) str[i]=str[i].join('').split(',');

  str.sort((a,b) => a.length - b.length);
  let answer = [];
  
  for (let i=0; i<str.length; i++) {
    for (let j=0; j<str[i].length; j++) {
      str[i][j] = Number(str[i][j]);
      if (!answer.includes(str[i][j])) {
        answer.push(str[i][j]);
      }
    }
  }
  return answer;
}

console.log(solution("{{20,111},{111}}"))
// console.log(solution("{{2},{2,1},{2,1,3},{2,1,3,4}}"))

다른 풀이

parse의 첫번째 인자로 {}를 잡아내는 정규표현식,
두번째 인자로 {이면 [, }이면 ]로 바꾸는 replacer 함수를 콜백으로 넘겨주는 식으로 바꾸면 좋은 풀이라고 한다....

filter로 포함되지 않는 숫자들만 남겨서 concat으로 계속 배열을 합치다 보면 정답 배열이 도출된다.

function solution(s) {
  return JSON.parse(s.replace(/{/g, '[').replace(/}/g, ']'))
  .sort((a, b) => a.length - b.length)
  .reduce((arr, v, n) => {
      if (n) {
          return arr.concat(v.filter(f => !arr.includes(f)));
      }
      return v;
  }, []);
}

str.slice(2,-2).split('},{') 가 인상적이다.

const tupleFrom = (str) =>
  str.slice(2, -2).split('},{')
    .map((it) => toNumbers(it))
    .sort(accendingByLength)
    .reduce((acc, cur) =>
      [...acc, ...cur.filter((it) => !acc.includes(it))], []);

const toNumbers = (str) => str.split(',').map(it => Number(it));

const accendingByLength = (arr1, arr2) => arr1.length - arr2.length;

const solution = (s) => tupleFrom(s);

console.log(solution("{{20,111},{111}}"))
// console.log(solution("{{2},{2,1},{2,1,3},{2,1,3,4}}"))

Set을 활용한 풀이

function solution(s) {
  let answer = [];
  let newArr = JSON.parse(s.replace(/{/g,'[').replace(/}/g,']'));
  newArr.sort((a, b) => {return a.length - b.length});
  let temp = [];
  for(let i = 0; i < newArr.length; i++) {
      for(let j = 0; j < newArr[i].length; j++) {
          temp.push(newArr[i][j]);
      }
  }
  answer = [...new Set(temp)];
  return answer;
}
profile
https://medium.com/@wooleejaan

0개의 댓글