Published 2022. 11. 4. 21:30

1. 개요

집합이 주어질 때 어떤 튜플인지를 return 하는 문제였다.
 
집합에서의 원소 순서는 상관없지만 집합은 튜플 원소의 위치와 상관이 있다.
 
예를들면 튜플이 [20, 10, 50, 30]이라고 할 때 원소가 3개인 집합을 만드려면 20, 10, 50 튜플 순서에 따라 포함하되 배치는 상관이 없다는 말이 된다

 

 

프로그래머스

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

programmers.co.kr

 

2. 풀이

* 1) 데이터를 배열로 변경하고 {}를 자른다
* 2) 원소 배열 길이 내림차순으로 변경하고 해당 배열의 추가되는 원소가 튜플에 순서로 들어갈 친구다.
* 3) 해쉬로 이전에 들어갔던 값들을 저장하고 이번에 들어오는 값을 찾았다

사실 문제는 엄청 쉬웠는데 들어오는 문자열 파싱하는데 오래 걸렸다

/**
 * @param {string} s
 * @returns
 */

function solution(s) {
  let answer = [];
  // 처음과 끝을 잘라버리고 },{ 순서로 열린다는 특징을 가지고 문자열을 파싱했다.
  let strList = s.replace("{{", "").replace("}}", "").split("},{");
  const setList = [];
  for (let i = 0; i < strList.length; i++) {
    setList.push(strList[i].split(","));
  }
  setList.sort((a, b) => a.length - b.length);
  const check = new Map();

  for (let i = 0; i < setList.length; i++) {
    for (let j = 0; j < setList[i].length; j++) {
      // 튜플에 등록된 값이 아니라면
      const num = parseInt(setList[i][j]);
      if (check.get(num) !== 1) {
        check.set(num, 1);
        answer.push(num);
        break;
      }
    }
  }

  return answer;
}

console.log(solution("{{20,111},{111}}"));
복사했습니다!