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}}")
입력 자료형이 Object자료형이 아니라 string
형태로 되어 있어서, {
를 지워주고 ,
를 기준으로 split
해 배열로 만들었다.
그리고 중복이 존재하지 않으므로 요소 길이가 작은 것들부터 넣는다.
다음 넣을 요소가 이미 넣어진 요소와 중복한다면 그 요소는 SKIP한다.
➕ sort((a,b)=>a.length - b.length ))
이 방법을 생각했었는데, 다시 해봐야겠다.