[JavaScript][Programmers] 튜플

조준형·2021년 8월 30일
0

Algorithm

목록 보기
94/142
post-thumbnail

🔎 직업군 추천하기

❓ 문제링크

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

📄 제출 코드

function solution(s) {
  
  s = s.replace(/[{},]/g, ' ')
  let tmp = s.split(' ');
  let obj = {};

  tmp.forEach(el => {
    (Object.keys(obj).indexOf(el) != -1)? obj[el] += 1: obj[el] = 1
  })
  
  let keys = Object.keys(obj);
  keys.splice(keys.indexOf(''),1);

  let answer = keys
    .map((el) => {
      return[parseInt(el), obj[el]];
    }).sort((a, b) => {
      return b[1] - a[1];
    }).map((el) => {
      return el[0]
    });
  
  return answer;
}
let s = "{{20,111},{111}}"
console.log(solution(s));

처음에 문제가 이해가 잘 안되서 그냥 중복 되지 않는 배열을 도출해내면 되는 건줄알았다.
그래서 Set을 이용해 중복제거한 배열을 출력해냈는데 정답이 나오지 않았다.
그래서 테스트케이스에 답이 나오는 기준(규칙?)이 뭔지 확인해봤다.

기준은 배열 s가 주어지면 각 원소가 많이 나온 순서대로 answer에 집어넣어야 답이 나온다.

"{{2},{2,1},{2,1,3},{2,1,3,4}}"의 경우
2가 4, 1이 3, 3이 2, 4가 1
answer = 2 1 3 4

"{{1,2,3},{2,1},{1,2,4,3},{2}}"의 경우
2가 4, 1이 3, 3이 2, 4가 1
answer = 2 1 3 4

"{{20,111},{111}}"의 경우
20이 1, 111이 2
answer = 111 20

"{{4,2,3},{3},{2,3,4,1},{2,3}}"의 경우
4가 2, 2가 3, 3이 4, 1이 1
answer = 3 2 4 1

처음 정답은 for문을 여러번 사용해서 답을 구했다.

function solution(s) {

  s = s.replace(/[{},]/g, ' ')
  // console.log(s)
  let tmp = s.split(' ');
  let obj = {};

  tmp.forEach(el => {
    (Object.keys(obj).indexOf(el) != -1)? obj[el] += 1: obj[el] = 1
  })

  let sortable = [];
  let keys = Object.keys(obj);
  for (let i = 0; i < keys.length; i++) {
    if (keys[i] == '') continue;
    else {
      sortable.push([parseInt(keys[i]), obj[keys[i]]]);
    }
  }
  sortable.sort((a, b) => {
    return b[1] - a[1];
  })
  // console.log(sortable);
  let answer = [];
  sortable.forEach(el => {
    answer.push(el[0]);
  })
    return answer;
}

정답이 맞는지 확인 후 sortable부분을 map을 이용해서 합칠 수 있겠다는 생각이 들어 map을 사용해 하나의 배열로 줄여서 answer를 바로도출 해냈다.

 let keys = Object.keys(obj);
 keys.splice(keys.indexOf(''),1);
 let answer = keys
    .map((el) => {
      return[parseInt(el), obj[el]];
    }).sort((a, b) => {
      return b[1] - a[1];
    }).map((el) => {
      return el[0]
    });
profile
깃허브 : github.com/JuneHyung

0개의 댓글