[프로그래머스] 큰 수 만들기(javascript)

프린이·2020년 11월 24일
0
post-thumbnail
  • 제 코드는 최선의 방안은 아닙니다.
  • 단순히 기록용, 공유용이니 이 점 보실 때, 참고바랍니다!

🔗 문제 링크

https://programmers.co.kr/learn/courses/30/lessons/42883

📙 풀이 과정

  • 주어진 k가 2이고, number의 길이는 7일 때, 5(7 - 2)자리의 최대값을 만들어야 한다.
    ※주의 사항!!
    -주어진 number로 최대값 만들 때 digit들의 순서는 바뀔 수 없다.
  • 그렇다면, 정해놓은 범위에서 number digit중에 최대값을 구하는 과정을 거쳐야함.
  • 포문의 범위는 우리가 만약에 구해야하는 자릿수의 값이 5라면, [0,1,2] index중에 최대값을 가지고 있는 index가 무엇인지 구한다.
    ※이렇게 안하고 전 index범위에서 위 과정을 거치면, 만약 가장 마지막 index의 value가 제일 큰 값일 때, 뒤에 오는 값이 없어서 5자리 값을 만들 수 없기 때문
  • 구한 index를 포문의 시작 값으로 정하고 이제 남은 자릿수가 몇자리인지 계산하고 남은 자릿수는 남기기위해 포문의 종료값을 (number.length - 남은 자릿수)로 설정해준다.
  • 위 과정을 구해야하는 자릿수만큼 반복해준다.

📝 답안 코드

function solution(number, k) {
    var answer = '';
    var max = 0, remember = 0;
    var t = number.length - k;
    var number2 = number.split('');
    var remember = 0;
    
    while(k != number.length){
        max = 0;
        if(t >= 1) t = t - 1;
        for(var i = remember; i < number2.length - t; i++){
            if(number2[i] == 9){
                max = number2[i];
                remember = i;
                break;
            }
            if(max < number2[i]){
                max = number2[i];
                remember = i;
            }
        } 
		remember++;
        answer = answer + max;
        k++;
    }
      
    return answer;
}

❌ 오답 코드

function solution(number, k) { /** 테스트 10번 시간초과 문제 해결 못함 */
    var answer = '';
    var max = 0, remember = 0;
    var t = number.length - k;
    var number2 = number.split('');
    var remember = 0;
    
    while(k != number.length){
        max = 0;
        if(t >= 1) t = t - 1;
        for(var i = remember; i < number2.length - t; i++){
            if(max < number2[i]){
                max = number2[i];
                remember = i;
            }
        }
        remember++;
        answer = answer + max;
        k++;
    }
      
    return answer;
}

오답의 이유

  • 특정 범위 내에서 각각의 자릿수 중 어떤 값이 제일
    큰지 검사하는 과정을 for문에서 거친다.
  • 만약 자릿수 값이 9라면, 굳이 for문을 끝까지 돌지 않아도 되는데 그 부분을 작성하지 않아서 시간 초과 에러가 났었다.
profile
주니어 프론트엔드개발자

2개의 댓글

comment-user-thumbnail
2020년 11월 25일

오답코드까지!! ☜(゚ヮ゚☜) 정말 멋져요 : )

1개의 답글