[lv2] 튜플

걸음걸음·2023년 2월 26일
0

Test

목록 보기
10/29

문제링크

  • 튜플을 표현하는 집합이 담긴 문자열 s
  • 해당 s가 표현하는 튜플을 배열에 담아 return

튜플(Tuple)
셀 수 있는 수량의 순서 있는(순서를 따르는 요소의) 열거
중복되는 원소가 있을 수 있음
원소에 정해진 순서가 있으며 해당 순서가 다르면 다른 튜플
튜플 원소의 개수는 유한함
중복되는 원소가 없는 n-튜플이 주어질 때 {{a1},{a1,a2},{a1,a2,a3}...}으로 표현 가능
집합은 원소의 순서가 바뀌어도 상관없음

function solution(s) {
  	// s를 먼저 2차 배열로 만들기
    // 길이가 작은 것부터 순서대로, 중복되는거 없이 넣기
    const arr = JSON.parse(s.replace(/{/g,'[').replace(/}/g,']'))
    arr.sort((a,b)=>a.length - b.length);
    const tuple = [];
    // map = 새로운 배열 반환
    // forEach = 반환 없음
    arr.forEach((ele)=>{
        ele.forEach((element)=>{
            if(!tuple.includes(element)){
                tuple.push(element)
            }
        })
    })
    return tuple
}

개선

replace 함수의 두번째 인자로 '{'이면 '[', '}'이면 ']'로 바꾸는 replacer 주기

다른 사람의 풀이

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);

주어지는 문자열 s에서 가장 바깥을 감싸는 '{{' '}}' 를 빼고 '}{'를 기준으로 배열화 시키는 방법.

profile
꾸준히 나아가는 개발자입니다.

0개의 댓글