KimMinJun
Coding Note
KimMinJun
전체 방문자
오늘
어제
  • 분류 전체보기 (486)
    • ALGORITHM (11)
      • 정렬 (6)
      • 최단경로 (1)
      • 자료구조 (1)
      • 슬라이딩 윈도우 (1)
      • etc (2)
    • Git (5)
    • Web (24)
      • Vanilla JS (13)
      • TS (2)
      • React (7)
      • ETC (1)
    • React 공식문서 (번역, 공부) (11)
      • Quick Start (2)
      • Installation (0)
      • Describing the UI (9)
      • Adding Interactivity (0)
      • Managing State (0)
      • Escape Hatches (0)
    • Next.js 공식문서 (번역, 공부) (3)
      • Getting Started (2)
      • Building Your Application (1)
    • PS (431)
      • 백준 (187)
      • Programmers (104)
      • CodeUp (21)
      • STL (3)
      • 제코베 JS 100제 (50)
      • SWEA (0)
      • LeetCode (65)
    • IT (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 관리

공지사항

인기 글

태그

  • 다이나믹 프로그래밍
  • 제코베 JS 100제
  • C++
  • tree
  • 문자열
  • 백준
  • 수학
  • C
  • string
  • js
  • recursion
  • 정렬
  • codeup
  • Level1
  • programmers
  • Level 1
  • 그래프
  • Level 2
  • LeetCode
  • Level 0

최근 댓글

최근 글

hELLO · Designed By 정상우.
KimMinJun

Coding Note

PS/Programmers

Programmers / Level 2 / 튜플 / JS

2022. 12. 29. 22:15

< 문제 바로가기 >

 

프로그래머스

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

programmers.co.kr

 

/**
 * 문자열을 받아 배열로 변환해주는 함수
 *
 * @param {string} s
 * @returns {string[][]}
 */
 function stringToArray(s) {
  let result = [];

  s = s.split('}');
  for (let i = 0; i < s.length; i += 1) {
    let current = s[i];
    let tmpArr = [];

    let tmpStr = '';
    for (let j = 0; j < current.length; j += 1) {
      // ',' 라면 그 전까지 tmpStr에 저장한 문자열이 있을경우에
      // tmpArr에 push하고 빈문자열로 바꿔줌
      if (current[j] === ',') {
        if (tmpStr.length > 0) tmpArr.push(tmpStr);
        tmpStr = '';
      }
      // 숫자가 아닐경우, 즉 문자일 경우에는 continue
      if (isNaN(current[j])) continue;
      // 숫자일 경우에는 tmpStr에 더해줌
      else tmpStr += current[j];
    }

    // 반복문이 끝나서 미처 push하지 못한 문자열이 있을경우 tmpStr에 push
    if (tmpStr.length > 0) tmpArr.push(tmpStr);
    result.push(tmpArr);
  }

  // 저장된 배열의 길이 순서대로 오름차순 정렬
  result.sort((a, b) => a.length - b.length);
  return result;
}

/**
 * 배열을 받아 문제에서 요구하는 tuple로 만들어 반환하는 함수
 *
 * @param {string[][]} arr
 * @returns {number[][]}
 */
function arrayToTuple(arr) {
  // 중복제거를 위해 set 선언
  let set = new Set();

  for (let i = 0; i < arr.length; i += 1) {
    for (let j = 0; j < arr[i].length; j += 1) {
      set.add(parseInt(arr[i][j]));
    }
  }

  // 전개구문 사용시에 원소가 하나 있을시에는 원하는 값이 나오지 않음
  // 예를 들어 {{123}}일 경우에는 new Set(...[123]) 하면,
  // new Set(123)이 되기 때문에 null값을 123개 가진 set이 만들어짐
  // 따라서 직접 순회하면서 넣어주었음
  let tuple = [];
  set.forEach((el) => {
    tuple.push(el);
  });

  return tuple;
}

function solution(s) {
  let arr = stringToArray(s);
  let tuple = arrayToTuple(arr);

  return tuple;
}

 

저작자표시 (새창열림)

'PS > Programmers' 카테고리의 다른 글

Programmers / Level 2 / 점프와 순간 이동 / JS  (0) 2023.01.01
Programmers / Level 2 / 예상 대진표 / JS  (0) 2022.12.30
Programmers / Level 2 / 구명보트 / JS  (0) 2022.12.29
Programmers / Level 2 / [3차] 파일명 정렬 / JS  (0) 2022.12.27
    'PS/Programmers' 카테고리의 다른 글
    • Programmers / Level 2 / 점프와 순간 이동 / JS
    • Programmers / Level 2 / 예상 대진표 / JS
    • Programmers / Level 2 / 구명보트 / JS
    • Programmers / Level 2 / [3차] 파일명 정렬 / JS
    KimMinJun
    KimMinJun

    티스토리툴바