Jun 개발노트

프로그래머스 - 가운데글자가져오기

2020-02-24

가장 큰 수

  1. 이해

    • 주어진 숫자로 최고의 높은 수를 구하여라
  2. 계획

    • 문자열로 비교하여 내림차순으로 정렬하자.
  3. 실행

    describe('제일 큰수 찾기', () => {
        it('최종', () => {
            expect(solution([0,0,0,0,0])).toEqual('0');
            expect(alignNum([3, 30, 34, 5, 9])).toEqual([9,5,34,3,30]);
            expect(someoneSolution([3, 30, 34, 5, 9])).toEqual('9534330');
    
        });
    });
    
    const alignNum = (numbers) => {
        return numbers.sort((a,b)=>String(b).repeat(4).slice(0,4) - String(a).repeat(4).slice(0,4))
    }
    const solution = numbers => {
        const answer = alignNum(numbers); 
        if(answer[0] === 0) return '0'
        else{
            return answer.join('')
        }
    }
    const someoneSolution = (numbers) => {
        var answer = numbers.map(v=>v+'')
                            .sort((a,b) => {
                                return (b+a)*1 - (a+b)*1
                            })
                            .join('');
                            console.log(answer)
        return answer[0]==='0'?'0':answer;
    }
    
  4. 반성

    • 문자열로 정렬하면, 30, 3을 구별하지 못한다.
    • 힌트를 보니까 숫자를 크게 만든 다음, 비교하였다. 결국 자릿수를 들어가는 숫자를 비교하는 것이니까.. 역시 다들 똑똑하다
    • repeat()함수를 통해서 제한조건의 값이 1000이하라고 해서 4자리로 만들었다.
    • '0'만 들어왔을 경우에 대비해서 3항 방정식을 썻다.