프로그래머스 LEVEL 2(마법의 엘리베이터)

image

  • 사용 언어 : javascript

  • 해결 날짜 : 2023-01-05

  • 해결 방법 :

    • 인자로 받은 storey를 한 글자씩 저장
    • storey를 거꾸로 돌면서
      • 현재 인덱스의 값이 10인 경우 다음 인덱스로 올림 처리
      • 현재 인덱스의 값이 6 이상인 경우
        • answer에 10 - storey[i] 추가
        • 다음 인덱스로 올림 처리
      • 현재 인덱스의 값이 4 이하인 경우 answer에 storey[i] 추가
      • 현재 인덱스의 값이 5인 경우
        • answer에 storey[i] 추가
        • 다음 인덱스 값이 6이상이거나, 현재 인덱스부터 0번 인덱스까지의 값이 전부 5라면 다음 인덱스로 올림 처리
  • 회고 :

    • x
  • 코드

    function solution(storey) {
      let answer = 0;
      let carry = 0;
    
      storey = storey
        .toString()
        .split('')
        .map((e) => parseInt(e, 10));
    
      for (let i = storey.length - 1; i >= 0; i--) {
        if (storey[i] === 10) {
          if (i === 0) carry = 1;
          else storey[i - 1] += 1;
        } else if (storey[i] >= 6) {
          answer += 10 - storey[i];
    
          if (i === 0) carry = 1;
          else storey[i - 1] += 1;
        } else if (storey[i] <= 4) {
          answer += storey[i];
        } else {
          answer += storey[i];
    
          let flag = false,
            temp = i;
    
          while (temp >= 0) {
            if (storey[temp] <= 4) break;
            else if (storey[temp] >= 6) {
              flag = true;
              break;
            }
            temp -= 1;
          }
    
          if (temp < 0 && storey[0] === 5) flag = true;
          if (flag) storey[i - 1] += 1;
        }
      }
    
      return answer + carry;
    }
    
  • 출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges