[알고리즘] 튜플 js
개요
집합이 주어질 때 어떤 튜플인지를 return 하는 문제였다.
집합에서의 원소 순서는 상관없지만 집합은 튜플 원소의 위치와 상관이 있다.
예를들면 튜플이 [20, 10, 50, 30]이라고 할 때 원소가 3개인 집합을 만드려면 20, 10, 50 튜플 순서에 따라 포함하되 배치는 상관이 없다는 말이 된다
풀이
* 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}}"));