[프로그래머스/JS] 마법의 엘리베이터

코린·2023년 11월 13일
0

알고리즘

목록 보기
42/44
post-thumbnail

🧐 문제 풀이

접근 방식

한 자리씩 뜯어서 봐주면 됩니다!

숫자는 5를 기준으로 생각해주면 됩니다.

  1. 5를 넘지 않는다!

마이너스 해서 없애주는 것이 낫습니다.

  1. 5를 넘는다!

10으로 만들어서 넘겨주는 것이 낫습니다.

ex) 16 이면 4를 더해서 20으로 만들어주고 10씩 2번 뺴서 6번의 연산을 거치면 됩니다.

주의

5보다 클 때는 앞자리 수가 무엇인지도 생각해주어야 합니다!

5보다 크면서 앞 자리수가 5 미만인 경우

45의 경우는 5를 빼주는 경우가 더 최적입니다.

  • -1을 5번해서
  • 40으로 만들어줍니다.
  • -10을 4번 해줍니다.
  • 결과: 9번

반대의 경우

  • +1을 5번해서
  • 50을 만들어줍니다.
  • -10을 5번 해줍니다.
  • 결과: 10번

5보다 크면서 앞 자리수가 5 이상인 경우

95의 경우는 5를 더해주는 경우가 더 최적입니다.

  • +1을 5번해서
  • 100으로 만들어줍니다.
  • -100을 1번 해줍니다.
  • 결과: 6번

반대의 경우

  • -1을 5번해줍니다
  • -10을 9번 해줍니다.
  • 결과: 14번

맨 앞자리수가 5을 넘는 경우도 10으로 만들어주는 것이 이득입니다.

예시) 678

  • +1을 2번 해줍니다.
  • 결과: 680
  • +10을 2번 해줍니다.
  • 결과: 700
  • +100을 3번 해줍니다.
  • 결과: 1000
  • -1000을 1번 해줍니다.
  • 결과: 0

저의 경우 맨 앞자리는 그냥 - 연산만 해주면 된다고 생각했습니다......😂

📝 정답 코드

function solution(storey) {
    let answer = 0;
    
    while(storey != 0){
 
       let num = storey % 10;
        
        
        if(num > 5 ){//5보다 큰 경우
            //5보다 크면 10자리로 넘기는게 나음
            answer += (10-num);
            
            //올림 처리
            storey += (10-num);
        }
        else if(num === 5){ //5인 경우
            
            let temp = storey-num;
            temp /= 10;
            
            if((temp % 10) >= 5){
                //5보다 크면 10자리로 넘기는게 나음
                answer += (10-num);

                //올림 처리
                storey += (10-num);
            }
            else{
                answer += num;
                storey -= num;
            }
        }
        else{
            answer += num;
            storey -= num;
        }
        
        storey /= 10;
        
    }
    
    return answer;
}
profile
안녕하세요 코린입니다!

0개의 댓글