ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [프로그래머스 / JS] Lv.1 숫자 짝꿍
    Algorithm/프로그래머스 2022. 12. 22. 18:23
    반응형

    문제 설명

      두 정수 X, Y의 임의의 자리에서 공통으로 나타나는 정수 k(0 ≤ k ≤ 9)들을 이용하여 만들 수 있는 가장 큰 정수를 두 수의 짝꿍이라 합니다(단, 공통으로 나타나는 정수 중 서로 짝지을 수 있는 숫자만 사용합니다). X, Y의 짝꿍이 존재하지 않으면, 짝꿍은 -1입니다. X, Y의 짝꿍이 0으로만 구성되어 있다면, 짝꿍은 0입니다.

    예를 들어, X = 3403이고 Y = 13203이라면, X와 Y의 짝꿍은 X와 Y에서 공통으로 나타나는 3, 0, 3으로 만들 수 있는 가장 큰 정수인 330입니다. 다른 예시로 X = 5525이고 Y = 1255이면 X와 Y의 짝꿍은 X와 Y에서 공통으로 나타나는 2, 5, 5로 만들 수 있는 가장 큰 정수인 552입니다(X에는 5가 3개, Y에는 5가 2개 나타나므로 남는 5 한 개는 짝 지을 수 없습니다.)
    두 정수 X, Y가 주어졌을 때, X, Y의 짝꿍을 return하는 solution 함수를 완성해주세요.

     


    제한사항

    • 3 ≤ X, Y의 길이(자릿수) ≤ 3,000,000입니다.
    • X, Y는 0으로 시작하지 않습니다.
    • X, Y의 짝꿍은 상당히 큰 정수일 수 있으므로, 문자열로 반환합니다.

     

    풀이

    function solution(X, Y) {
        let g = [X, Y].sort((a, b) => a.length - b.length);
        let nested = ''
    
        g = g.map(ele => {
            let objCount = ele.split('').reduce((acc, cur) => {
                acc[cur] = (acc[cur] || 0) + 1
                return acc
            }, {})
            return objCount
        })
    
        for (let key of Object.keys(g[0])) {
            if (g[1][key]) {
                let count = Math.min(g[0][key],g[1][key])
                nested += key.repeat(count)
            }
        }
        
        nested = nested.split('').sort((a, b) => b - a).join('')
    
        if (nested[0] === undefined) return "-1"
        else if (nested[0] === '0') return "0"
        else return nested
    }

    실행에 걸린 최대 시간 : 526.95ms

     

    사고과정

    1. 일단 둘 중 짧은 걸 찾자. 배열로 감싸고 sort를 쓰면 되겠다
    2. 작은 걸로 반복문을 돌리면서 조건문을 이용해 중복되는 값이 있으면 nested에 넣고 비교군(긴 것)에서 지우자
    3. 시간초과 뜨네???
    4. 객체를 이용해서 시간을 단축시켜야 겠다.
    5. split을 통해 문자열을 배열로 바꾸고 reduce를 통해 객체를 생성하자
    6. 짧은거 긴거 다 변환완료 됐으면 짧은 것의 키 값으로 반복문을 돌리고 반약 긴것에도 동일한 키가 존재한다면 키에 대응하는 value 값 중 작은것 만큼 연속된 문자를 nested에 추가하자
    7. nested를 한번 정리해야겠네... 1번에서처럼 정리해야지
    8. 조건에 따라 반환만 하면 되겠구만
    9. 성공!! 

     

    평가

    다른 사람들의 풀이에서 걸리는 시간보다 반 정도밖에 안걸린다. 나름 괜찮게 푼듯ㅋ

     

    개선점

     

    알게된점

     

     

     

     

    반응형

    댓글

Designed by Tistory.