[프로그래머스] 튜플

쿼카쿼카·2023년 2월 21일
0

알고리즘

목록 보기
36/67

코드

function solution(s) {
  const ans = [];
  
  s.slice(2, -2)
   .split('},{')
   .sort((a, b) => a.length - b.length)
   .map(x => x.split(','))
   .forEach((x, i) => {
      if(i===0) ans.push(x[0]);
      else {
          ans.push(x.filter(num => ans.indexOf(num) === -1)[0])
      }
  })
  
  return ans.map(Number);
}

// 더 간단한 풀이
// function solution(s) {
//     const ans = [];

//     return s.slice(2, -2)
//      .split('},{')
//      .sort((a, b) => a.length - b.length)
//      .map(x => x.split(',').map(y => +y))
//      .reduce((acc, cur) => [...acc, ...cur.filter(x => acc.indexOf(x) === -1)])
// }

reduce 사용 잘 하면 코드가 줄어들어요

  • 전 예전부터 리듀스 사용이 그렇게 어렵더라고요
  • 하지만 이거 알면 줄 길어질 거 한 줄에 해결 가능하고 for 다음 수준으로 reduce 겁나 빨라 우사인볼트야 그냥
  • forEach에서 if 쓸 때부터 뭔가 찝찝했는데 어째 내 뇌 용량이 저기까지인걸ㅎㅎㅎ
  • reduce를 보고 바로 내 코드인 양 배껴봤어요
    • reduce의 acc는 맥주 500cc 1800cc 2700cc는 사실 1800cc랑 똑같다는 소문 있었는데 이거 다 구라임
    • acc는 어키유믈레잍(모음? 누적), cur은 커뤈트(현재)
    • 매번 리턴을 하는데 ...acc로 항상 acc는 그대로 배출하고, cur에서 filter를 이용해 acc에 x가 없는 애를 넣어주면 되겠죠? 순서대로니까
  • 여기서 중요한게 원래 남 코드에서 includes였는데 난 indexOf썼어요ㅎㅎㅎ
    • indexOf가 시간 더 빠르니까!!! 이정도면 내가 다 짠 코드지 나 0.9어시 칭찬해
profile
쿼카에요

0개의 댓글