개발후라이
개발후라이
개발후라이
  • 분류 전체보기 (285)
    • Web Front End (74)
      • Javascript & Typescript (26)
      • React (11)
      • Vue (4)
      • Nodejs (1)
      • HTML (6)
      • CSS (7)
      • HTTP (6)
      • 책 - Review (8)
    • TIL (0)
    • Problem Solved (135)
      • 알고리즘 (4)
      • BOJ (67)
      • Programmers (8)
      • HackerRank (33)
      • LeetCode (23)
    • 회고 (4)
      • 오늘의 회고 (16)
      • 주간 회고 (15)
      • 월간 회고 (7)
      • WakaTime (9)
    • Git (3)
    • 기타 (15)
      • 취업 (5)
      • 자격증 (1)

블로그 메뉴

  • GitHub
  • LinkedIn
  • 홈

인기 글

태그

  • 자바스크립트
  • 오늘의회고
  • 릿코드
  • 개발자
  • 노개북
  • JavaScript
  • 프론트엔드
  • 회고
  • TypeScript
  • 노마드북클럽

최근 댓글

최근 글

전체 방문자
오늘
어제

티스토리

hELLO · Designed By 정상우.
개발후라이

개발후라이

Problem Solved/LeetCode

[LeetCode] 66번 문제 - Plus One

2020. 5. 9. 01:52
반응형

문제

66. Plus One

문제 설명

배열을 하나의 숫자라고 생각하고, 숫자에 1이 더해졌을 때 결과배열을 반환하는 문제

처음에 9와 같이 경계선에 있는 값을 생각하고 무작정 배열을 숫자로 변환해 더했다.
자바스크립트의 숫자형이 감당할 수 없는 크기의 숫자가 배열로 나오면 Fail이 발생했다.
그것에 예외처리를 해 주기 위해 숫자를 중간부터 잘라서 더하는 일도 해 봤지만, 999999999999...와 같은 값은 계산이 불가능하다.

이 문제는 주어진 값이 배열인 점을 이용해서 반복해서 올림이 있는지 찾아내서 값을 바꿔 준다.
근데 digits.unshift(1);를 했을 때 아래 이미지처럼 자동으로 맨 앞자리가 0인 것과 아닌 것을 구분해 1을 붙여 줬다.
이에 대한 이유를 찾지 못했다.

image

성공 코드

실패한 풀이

const plusOne = (digits) => {
    let lastTen = digits.length >= 11? digits.splice(-11, 11) : digits.splice(-digits.length, digits.length);

    const isFirstZero = lastTen[0] === 0  && digits.length > 0;
    const isSecondZero = lastTen[1] === 0  && digits.length > 1 && isFirstZero;

    const plusNumber = parseInt(lastTen.join('')) + 1;
    const resultLast = plusNumber.toString().split('');

    const resultLastNum = [];
    resultLast.forEach(el => resultLastNum.push(parseInt(el)));

    if (isFirstZero) digits.push(0);
    if (isSecondZero) digits.push(0);

    resultLastNum.forEach(el => digits.push(el));
    return digits;
};

성공한 풀이

const plusOne = (digits) => {
    for(var i = digits.length - 1; i >= 0; i--){
      if(++digits[i] > 9) digits[i] = 0;
      else return digits;
    }
    digits.unshift(1);
    return digits;
};
반응형
저작자표시 (새창열림)
    'Problem Solved/LeetCode' 카테고리의 다른 글
    • [LeetCode] 1번 문제 - Two Sum
    • [LeetCode] 283번 문제 - Move Zeroes
    • [LeetCode] 350번 문제 - Intersection of Two Arrays II
    • [LeetCode][Javascript] 217번 - Contains Duplicate
    개발후라이
    개발후라이
    어제보다 오늘 발전하기 위한 공간 https://github.com/choisohyun

    티스토리툴바