프로그래머스 js 튜플

이명진·2022년 5월 20일
0

코드카타

목록 보기
26/69

2019년 카카오 겨울 인턴십 문제이다.

문제 설명

셀수 있는 수량의 순서 있는 열거 또는 어떤 순서를 따르는 요소들의 모음을 튜플이라고 한다. 튜플을 표현하는 집합이 담긴 문자열이 주어질때 튜플을 배열에 담아 리턴하면 된다.

문제 접근

예시로 "{{2},{2,1},{2,1,3},{2,1,3,4}}" 가 주어질때
답 은 [2, 1, 3, 4] 이다.
반대로 [2, 1, 3, 4] 의 튜플은 "{{2},{2,1},{2,1,3},{2,1,3,4}}" 일거다.
그냥 단순하게 객체안의 객체들안의 숫자들을 체크한다음에 가장 긴 객체들을 리턴하면 되겠다 생각했다.
하지만 순서가 다른것들이 있었다.
"{{1,2,3},{2,1},{1,2,4,3},{2}}" 이거 일 경우도 [2, 1, 3, 4] 답이 이거다.
만약 숫자가 가장 긴 걸 리턴 했을때 [1,2,4,3] 이된다.

각 문제들을 비교해보니 가장 많이 등장하는 숫자로 정렬하는 것같다.
2가 제일 많이 나왔고 1이 그다음 3이 그다음 4가 많이 나와서 이순서대로 정렬하나 보다 싶어서 이렇게 문제를 풀었다.

문제 풀이

내 로직은 아래와 같다. 힌트 및 답을 전혀 보지 않고 생각한대로 풀었다.
시간은 좀 걸렸지만 다 통과할수 있었다.

function solution(s) {
  
  let changer = s.replace(/\{|}/g,'')
	//정규식 {} 제거 
    let answer = changer.split(',');
	//원소의 개수 누적 
  let obj = {}
  answer.map(x=>{
    if(obj[x]){
      obj[x]++
    }else{
      obj[x]=1
    }
    
  })
  //원소의 개수로 정렬
	const sortable= Object.entries(obj).sort(([,a],[,b])=>b-a).map(x=>{
    return x[0]*1
  })

    return sortable;
}

처음 생각한것처럼 정규식으로 {} 를 제거 하였고 원소의 개수를 객체로 누적시켜주었다. 그리고 많이 등장한거로 정렬해야 해서 객체를 정렬해야 하는데
이부분에서 어려워서 검색을 해봤다.
Object.entries 이 함수를 콘솔 찍어보니 객체 키와 값을 배열로 저장해주는 역할을 하였다. [키,값] 이렇게 배열로 저장해준다.
그리고 sort 함수를 적용할때 키로 구분해야 하니 [,a],[,b] 이렇게 준것이다.
그리고 map으로 키 값들을 리턴해주었다.

한번에 통과해서 이렇게 푸는 맞는건지 어벙벙하기도 하고 뿌듯하기도 했다.

profile
프론트엔드 개발자 초보에서 고수까지!

0개의 댓글