-
문제
https://programmers.co.kr/learn/courses/30/lessons/64065
How to Solve ?
[1] 문자열 처리
튜플을 배열 형태로 바꿔준 뒤, 규칙을 찾아 해결 하면 된다.
주어진 예시를 바탕으로 규칙을 추론 해보면, 순서대로 튜플의 값을 추가 하되 각각의 튜플에서 오름차순을 다시 수행 한다는 사실을 알 수 있다.
즉, 기존 튜플의 값을 그대로 가지고 간다면 [3] -> [3,2] -> [3,2,4] -> [3,2,4,1] 로 나와야 하는데 각 배열에서 다시 오름차순으로 정렬한 사실을 알 수 있다.
이 사실을 통해서 우리가 해낼 수 있는건, 배열의 크기로 오름차순 정렬을 하여 이 전 배열에서 없는 값들을 찾아내면서 루프를 돌면 이 문제를 해결 할 수 있다.
"{{4,2,3},{3},{2,3,4,1},{2,3}}" // output : [3,2,4,1]
전체 코드
// 스스로 구현 function solution(s) { const used = []; s = s.replace("{{", "").replace("}}", "").split("},{"); for (let i = 0; i < s.length; i++) { s[i] = s[i].split(",").map((e) => +e); } // 길이를 기준으로 오름차순 정렬 s.sort((a, b) => a.length - b.length); // 이전 배열에서 사용이 되었다면, 새롭게 추가된 값이 아님. for (let i = 0; i < s.length; i++) { for (let j = 0; j < s[i].length; j++) { if (!used.includes(s[i][j])) used.push(s[i][j]); } } return used; }
다른 사람의 코드
const tupleFrom = (str) => str .slice(2, -2) .split("},{") .map((it) => toNumbers(it)) .sort(accendingByLength) .reduce( (acc, cur) => [...acc, ...cur.filter((it) => !acc.includes(it))], [] ); const toNumbers = (str) => str.split(",").map((it) => Number(it)); const accendingByLength = (arr1, arr2) => arr1.length - arr2.length; const solution = (s) => tupleFrom(s);
'PS > 프로그래머스' 카테고리의 다른 글
[ 프로그래머스 ] 문자열 압축 ( 구현 - 자바스크립트 ) (0) 2021.07.09 [ 프로그래머스_ Lv3 ] 야근 지수 ( 그리디 - 자바스크립트 ) (0) 2021.06.26 [ 프로그래머스_Lv2 ] 파일명 정리하기 ( 문자열 - 자바스크립트 ) (0) 2021.06.23 [ 프로그래머스_Lv3 ] 섬 연결하기 ( 크루스칼 - 자바스크립트 ) (0) 2021.06.20 [ 프로그래머스_Lv3 ] 단속카메라 ( 그리디 - 자바스크립트 ) (0) 2021.06.19 댓글