프로그래머스_튜플

mingyu Lim·2023년 3월 1일

코딩테스트

목록 보기
5/32

문제설명

셀수있는 수량의 순서있는 열거 또는 어떤 순서를 따르는 요소들의 모음을 튜플(tuple)이라고 합니다. n개의 요소를 가진 튜플을 n-튜플(n-tuple)이라고 하며, 다음과 같이 표현할 수 있습니다.

예시 (2,1,3,4)

  • {{2}, {2, 1}, {2, 1, 3}, {2, 1, 3, 4}}
  • {{2, 1, 3, 4}, {2}, {2, 1, 3}, {2, 1}}
  • {{1, 2, 3}, {2, 1}, {1, 2, 4, 3}, {2}}

제한사항

  • s의 길이는 5 이상 1,000,000 이하입니다.
  • s는 숫자와 '{', '}', ',' 로만 이루어져 있습니다.
  • 숫자가 0으로 시작하는 경우는 없습니다.
  • s는 항상 중복되는 원소가 없는 튜플을 올바르게 표현하고 있습니다.
  • s가 표현하는 튜플의 원소는 1 이상 100,000 이하인 자연수입니다.
  • return 하는 배열의 길이가 1 이상 500 이하인 경우만 입력으로 주어집니다.

입출력

sresult
"{{2},{2,1},{2,1,3},{2,1,3,4}}"[2, 1, 3, 4]
"{{20,111},{111}}"[111, 20]

코드 설명

function solution(s) {
    var answer = [];
    let table = {}
    let arr = s.slice(2,s.length-2).split("},{").join(',').split(',')
  
    for(let i = 0 ; i < arr.length ; i++){
        if(table[arr[i]] === undefined) table[arr[i]] = 1
        else {
            table[arr[i]] += 1
        }
    }
    answer = Object.keys(table).sort( (a ,b) => table[b] -table[a])
    answer = answer.map((item) => Number(item))
    return answer
}
  • arr: s에 입력값 문자열에 0,1번 인덱스는 ({{)로 공통되고, 마지막과 그 전의 인덱스는 (}})로 공통되기 때문에 silce로 잘라 준다.
    결과: 2},{2,1},{2,1,3},{2,1,3,4
  • split,join,split: 위의 출력값에 split("},{")을 통해 (},{)을 기준으로 나누어 배열로 만든 다음 join(',')을 통해 숫자들을 나눈 뒤, 다시 배열로 ","를 기준으로 다시 배열로 돌려준다.
    만일, 마지막 split(',')을 돌리지 않는다면 반복문을 돌려 줄 때 ","도 같이 돌리기 때문에 따로 처리를 해줘야 된다.
  • 반복문
    • if(table[arr[i]] === undefined) table[arr[i]] = 1: table이라는 객체 안에 찾는 숫자의 값을 키 값으로 주고, 값으로 count가 한 번 되었기 때문에 1로 초기화 시켜준다.
    • else : 나머지 요소들에 대한 count 값을 계속해서 더해준다.
  • Object.keys(table).sort( (a ,b) => table[b] -table[a]): Object.keys를 통해 객체의 키 값들을 배열로 출력한 후, sort를 통해서 객체의 키에 맞는 값들을 내림차순으로 정리해준다.
    결과: ['2','1','3','4']
  • 마지막으로 map메소드를 사용해서 'number'값으로 바꿔준 후 리턴해준다.

0개의 댓글