HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
🤎
프론트엔드 데브코스 5기 교육생
/
🙆
박병현팀
/
➕
튜플
➕

튜플

레벨
LV.2
날짜
Nov 7, 2023
링크
https://school.programmers.co.kr/learn/courses/30/lessons/64065

🔎 문제


school.programmers.co.kr
https://school.programmers.co.kr/learn/courses/30/lessons/64065
 

🧩 구현과정 및 코드

개인 토글 영역에 구현 과정과 코드를 자유롭게 작성해주시면 됩니다.

사용할 데이터 구조와 풀이 방향성
사용할 데이터 구조와 풀이 방향성
적용할 알고리즘 혹은 메서드
적용할 알고리즘 혹은 메서드

수영


구현

  1. 문자열인 s를 배열 형태로 바꾼 tuples[]을 만든다.
  1. tuples 각 요소의 개수대로 오름차순 정렬을 한다.
  1. 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 }

정은


구현

  1. 문자열을 집합들을 담은 배열로 파싱
      • 앞 뒤의 중괄호 두개를 제외하고 ‘},{’로 구분하면 집합들을 배열의 원소로 둘 수 있다
  1. 집합 길이 오름차순으로 배열을 정렬
  1. 집합들을 확인, 원소는 집합을 쉼표로 구분해서 구분한다
  1. 이전 집합에서 추가된 요소만 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 문법에 능숙해질 수 있는 좋은 시간이었다
👦🏻
종혁
 
👦🏻
재웅