[프로그래머스 코딩테스트 연습문제] 마법의 엘리베이터 | 알고리즘 설명 & 문제 풀이 with 자바스크립트(Javascript)

Re_Go·2023년 12월 17일
0

코딩테스트연습

목록 보기
33/106
post-thumbnail

1. 문제 설명

2. 제한 사항

3. 입출력 예

4. 입출력 예 설명

5. 첫번째 문제 풀이(2023-12-17) failed

이번 문제는 제한 사항의 멕시멈이 1억이라 완탐으로 풀기는 좀 어려울 것 같았지만, 알고리즘 공부를 시작한지 얼마 안되어서 할 수 있는게 for문을 이용한 완탐 뿐이라... 다음과 같이 문제를 풀었습니다.

우선 입력된 storey를 숫자열 배열로 변환을 해준 후 1부터(i의 값을 이용할 예정) 배열의 길이만큼 반복을 하면서 while문으로 index(현재 배열의 i값)을 이용하여 현재 배열의 i의 값이 5보다 작을 경우 그 값을 감소시키고 count를 증가시킵니다. (5보다 작으면 값을 증가시키는 것보다 감소시키는게 0으로 도달하는데 더 빠르므로)

다음 5 이상, 9가 아닐 때(9라고 하면 반올림을 처리하는 if문으로 따로 처리를 해주어야 하기 때문) 값을 증가시키먀 count를 증가시킵니다.

다음 if문 조건은 현재 배열의 값이 9고, 배열의 0번째 인덱스가 0이 아닐 때(0번째 인덱스는 곧 천의 자리임을 의미함)에는 현재 자리를 0으로 만들고 다음 인덱스를 이어가고, 반대로 배열의 0번째 인덱스가 0이면 더 이상 반올림 효과를 내지 말고 현재 자리를 0으로 만들어 while문을 종료시키게 합니다.

근데 생각 자체를 배열의 뒷자리 숫자부터 앞자리까지 차례대로 거쳐갔어야 했는데 for문의 루프부터 글려먹어서... 어떻게 해서든 코드 실행에서 테스트 케이스는 통과했는데 코드 제출을 하니 단 두개 빼고 전부 실패.... 이건 다른 분들의 풀이를 보고 다시 도전을 해봐야 할 것 같습니다.

function solution(storey) {
    let numberArray = [];
    let convertStorey = storey.toString();

    for (let i = 0; i < convertStorey.length; i++) {
        numberArray.push(Number(convertStorey[i]));
    }

    let count = 0;
  
    for(let i = 1 ; i < numberArray.length+1 ; i++){
        let index = numberArray.length - i
        while(numberArray[index] > 0){
            if(numberArray[index] < 5){
                --numberArray[index];
                ++count;
            }else if(numberArray[index] >= 5 && numberArray[index] !== 9){
                ++numberArray[index];
                ++count;
            }else{

            }
            if(numberArray[index] === 9 && numberArray.indexOf(numberArray[index]) !== 0){
                numberArray[index] = 0;
                ++numberArray[index-1];
                ++count;
            }else if(numberArray[index] === 9 && numberArray.indexOf(numberArray[index]) === 0){
                numberArray[index] = 0;
                ++count;
            }
        }
    }
    return answer = count;
}
profile
인생은 본인의 삶을 곱씹어보는 R과 타인의 삶을 배워 나아가는 L의 연속이다.

0개의 댓글