[프로그래머스 자바스크립트] ‘가장 큰 수’ 풀어보기

2025. 1. 20. 20:55·Algorithm/Programmers(JavaScript)

문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/42746

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

1. 풀이

‘무슨 기준으로 정렬을 해야할까?’를 고민했다. 앞자리에 있는 수가 클수록 먼저 배치해야하는 것은 쉽게 알 수 있었다. 생각해봐야할 케이스는 34와 341 같은 경우이다. 둘 중에 무엇을 먼저 앞에 놓아야할까? 34134와 34341을 비교하면 34를 먼저 배치했을 때가 더 숫자가 컸다. 즉, 마지막 자리의 숫자가 더 큰 것이 먼저 배치가 되면 된다.

 

그래서 두 숫자를 비교할 때 각 숫자의 index를 설정하고, 맨 앞자리부터 숫자의 크기를 비교했다. 그리고 어떤 수의 index가 일의 자리까지 도착하면 그 수의 index는 더 이상 증가시키지 않았다.

 

 

시간 초과 코드

function sortNumbers(a, b) {
    
    a = String(a);
    b = String(b);
    
    let a_index = 0;
    let b_index = 0;
    
    const a_length = a.length;
    const b_length = b.length;
    
    while(a_index < a_length) {
        
        if(b_index >= b_length) {
            break;
        }
        
        
        if(a[a_index] > b[b_index]) {
            return 1;
        }
        else if(a[a_index] < b[b_index]) {
            return -1;
        }
        else {
            
            if(a_index < a_length - 1) {
                a_index++;
            }
            
            if(b_index < b_length - 1) {
                b_index++;
            }
        }
    }
}

function solution(numbers) {
    
    let answerArray = numbers.sort((a,b) => sortNumbers(a,b));
    answerArray = answerArray.reverse();
        
    let answer = '';
    
    answerArray.forEach((e) => {
        answer += e;
    })
    
    return answer;
}

제출을 해봤는데 시간이 초과되서 테스트를 통과하지 못했다. 숫자 두 개를 비교할 때마다 인덱스를 두고 하나씩 증가시키는 방식은 시간이 오래 걸리는 것 같다. 어떻게 하면 시간 초과를 방지할 수 있을까?


2. 코드

function sortNumbers(a, b) {
    
    a = String(a);
    b = String(b);
    
    const first_a = a + b;
    const first_b = b + a;
    
    if (first_a > first_b) {
        return 1;
    }
    else {
        return -1;
    }
}

function solution(numbers) {
    
    let answerArray = numbers.sort((a,b) => sortNumbers(a,b));
    answerArray = answerArray.reverse();
        
    let answer = '';
    
    answerArray.forEach((e) => {
        answer += e;
    })
    
    if(Number(answer) === 0) {
        return '0';
    }
    
    return answer;
}

생각해보니 그냥 두 수를 차례대로 붙여보고, 거꾸로 붙여봐서 둘 중에 무엇이 더 큰지 비교하면 되는거였다. 참고로 sort를 쓸 때는 1 아니면 -1을 return해야 제대로 작동이 된다. 그 사실을 잘 모르고 문자열을 return했더니 sort가 잘 동작하지 않았다.

 

그리고 테스트 케이스 하나가 끝끝내 통과되지 않아서 답답했는데, 찾아보니 [0, 0 ,0]인 케이스에서 자꾸 막혔던 것이었다. 내가 짠 코드에서는 ‘000’으로 출력되었어서 통과를 못했던 것이었고, answer를 숫자로 바꿀 때 0이면 문자 ‘0’을 출력되게 만들면 해당 테스트를 통과할 수 있었다.

저작자표시 비영리 변경금지 (새창열림)

'Algorithm > Programmers(JavaScript)' 카테고리의 다른 글

[프로그래머스 자바스크립트] ‘네트워크’ 풀어보기  (0) 2025.01.27
[프로그래머스 자바스크립트] ‘정수 삼각형’ 풀어보기  (0) 2025.01.24
[프로그래머스 자바스크립트] ‘모의고사’ 풀어보기  (0) 2025.01.11
[프로그래머스 자바스크립트] ‘올바른 괄호’ 풀어보기  (0) 2025.01.07
[프로그래머스 자바스크립트] ‘입국심사’ 풀어보기  (0) 2024.12.31
'Algorithm/Programmers(JavaScript)' 카테고리의 다른 글
  • [프로그래머스 자바스크립트] ‘네트워크’ 풀어보기
  • [프로그래머스 자바스크립트] ‘정수 삼각형’ 풀어보기
  • [프로그래머스 자바스크립트] ‘모의고사’ 풀어보기
  • [프로그래머스 자바스크립트] ‘올바른 괄호’ 풀어보기
퀵차분
퀵차분
웹 프론트엔드 개발자를 꿈꾸고 있습니다 :)
  • 퀵차분
    QC's Devlog
    퀵차분
  • 전체
    오늘
    어제
    • 분류 전체보기 (165) N
      • Frontend (28)
        • HTML, CSS (7)
        • Javascript (3)
        • React (11)
        • Typescript (2)
        • Next.js (4)
      • Node.js (3) N
      • Study (40)
        • Modern JS Deep Dive (13)
        • SQL (1)
        • Network (1)
        • 프롬프트 엔지니어링 (4)
        • 인공지능 (9)
        • 시스템프로그래밍 (11)
        • 선형대수학 (1)
      • Intern (4)
      • KUIT (20)
      • Algorithm (48)
        • Baekjoon(C++) (26)
        • Programmers(JavaScript) (22)
      • 우아한테크코스(프리코스) (4)
      • Project (7)
        • PROlog (4)
        • Nomadcoder (2)
      • 생각 (4)
      • Event (7)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    백준
    알고리즘
    티스토리챌린지
    시스템프로그래밍
    typescript
    KUIT
    react
    프로그래머스
    자바스크립트
    오블완
    next.js
    프론트엔드
    HTML
    프롬프트 엔지니어링
    프로그래머스 자바스크립트
    인공지능
    음악추천
    javascript
    타입스크립트
    리액트
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
퀵차분
[프로그래머스 자바스크립트] ‘가장 큰 수’ 풀어보기
상단으로

티스토리툴바