🔎 문제
🧩 구현과정 및 코드
개인 토글 영역에 구현 과정과 코드를 자유롭게 작성해주시면 됩니다.
사용할 데이터 구조와 풀이 방향성
적용할 알고리즘 혹은 메서드
수영
구현
- 문자열인 s를 배열 형태로 바꾼 tuples[]을 만든다.
- tuples 각 요소의 개수대로 오름차순 정렬을 한다.
- tuples의 요소인 각 tuple 배열에서 answer에 없는 값을 찾아 answer.push한다.
코드
function solution(s) { const answer = [] const tuples = JSON.parse(s.replace(/{/g, '[').replace(/}/g,']')) // 튜플 개수대로 정렬 [[2],[2,1],[2,1,3],[2,1,3,4]] tuples.sort((a, b) => a.length - b.length) // tuples, tuple 순회하면서 answer에 없는 값을 찾는다 tuples.forEach(tuple => { tuple.forEach(el => { const findIndex = answer.indexOf(el) // answer에 없는 값만 answer에 push if (findIndex === -1) { answer.push(el) } }) }) return answer }
정은
구현
- 문자열을 집합들을 담은 배열로 파싱
- 앞 뒤의 중괄호 두개를 제외하고 ‘},{’로 구분하면 집합들을 배열의 원소로 둘 수 있다
- 집합 길이 오름차순으로 배열을 정렬
- 집합들을 확인, 원소는 집합을 쉼표로 구분해서 구분한다
- 이전 집합에서 추가된 요소만 answer에 푸시한다
최종적으로 answer가 튜플이 된다
코드
function solution(s) { let sets = s.replace('{{','').replace('}}','').split('},{'); //1 const answer = [] sets.sort((a,b) => a.length - b.length) //2 for (let set of sets) { //3 for (let elem of set.split(',')) { elem = parseInt(elem) //원소를 parseInt해야 함에 주의! if (!answer.includes(elem)) { //4 answer.push(elem) break } } } return answer; }
종혁
구현
- 문자열의 형태를 배열로 바꿔줘야 함
- replaceAll을 이용하여 중괄호를 모두 배열로 바꿔줌 → 아직 문자열 형태
- Json.parse를 이용하여 실제 배열로 바꿔줌
- 길이가 짧은 집합부터 튜플의 원소와 순서를 찾아가야 함
코드
function solution(s) { //[111,20] [20] => result [20,111] //길이가 1인 집합은 무조건 튜플의 제일 앞에 존재함 - 경우의 수 한개 //튜플의 길이가 2라면, 무조건 [20,x]로 존재해야 함 //앞에서 구했던 튜플에서 없는 숫자를 튜플에 추가해줘야 함 const result = [] const stringArr = s.replaceAll('{','[').replaceAll('}',']') const arr = JSON.parse(stringArr).sort((a,b) => a.length - b.length) result.push(...arr.shift()) while(arr.length){ const tuple = arr.shift() for(const t of tuple){ if(!result.includes(t)){ result.push(t) break } } return result } return arr.reduce((arr, v, n) => { //arr - 현재 찾은 원소들 //v - 튜플 집합 return [...arr,...v.filter(f => !arr.includes(f))] }, []); }
재웅
구현
코드
function solution(s) { const answer = []; const regex = /{{|}}/g const dst = s.replaceAll(regex,"").split('},{') const sort = dst.sort((a,b)=>a.length-b.length) // [ '3', '2,3', '4,2,3', '2,3,4,1' ] sort.forEach((el)=>{ const dst = el.split(',') dst.forEach((element)=>{ if(!answer.includes(+element))answer.push(+element) }) }) return answer; }
✏️ 후기
문제를 풀고 느낀 점, 막혔던 부분 혹은 개선 사항 등을 자유롭게 작성해주시면 됩니다.
수영
- 이 문제를 이해하고 로직을 짜는 시간은 오래 걸리지 않았는데 구현하는 시간이 생각보다 오래 걸렸다.
- Array 메소드에서 검색 실패 결과값을 활용해서 없는 값을 찾을 수 있다는 점을 배웠다.
- 표현식을 처음으로 사용해봤는데 간단하게라도 알고 있으면 유용할 것 같다.
정은
- JS 문법에 능숙해질 수 있는 좋은 시간이었다
종혁
재웅