[LeetCode] Plus One

아르당·2025년 2월 23일
0

LeetCode

목록 보기
13/62
post-thumbnail

문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음

Ploblem

정수 배열 digits가 주어지고, 각 digits[i]는 정수의 i번째 자리 숫자이다. 숫자는 가장 중요한 자리에서 가정 덜 중요한 자리로 왼쪽에서 오른쪽 순으로 정렬된다. 정수는 제일 앞에 0을 포함하지 않는다.

정수에 1을 더하고 숫자 배열로 반환해라.

Example

#1
Input: digits = [1, 2, 3]
Output: [1, 2, 4]
Explanation: 배열은 정수 123을 나타낸다.
1을 더하면 123 + 1 = 124가 된다.
따라서 결과는 [1, 2, 4]이다.

#2
Input: digits = [4, 3, 2, 1]
Output: [4, 3, 2, 2]
Explanation: 배열은 정수 4321을 나타낸다.
1을 더하면 4321 + 1 = 4322가 된다.
따라서 결과는 [4, 3, 2, 2]이다.

#3
Input: digits = [9]
Output: [1, 0]
Explanation: 배열은 정수 9를 나타낸다.
1을 더하면 9 + 1 = 10이다.
따라서 결과는 [1, 0]이다.

Constraints

  • 1 <= digits.length <= 100
  • 0 <= digits[i] <= 9
  • digits은 제일 앞이 0을 포함하지 않는다.

Solved

주어진 배열의 마지막 인자에 1을 더하면 되는 문제이다.

정수 lastIdx를 선언하고 digits.length - 1을 할당한다.

int lastIdx = digits.length - 1;

마지막 인덱스에 있는 정수를 먼저 증가시켜준다.

digits[lastidx]++;

for문을 통해 순회하면서 해당 인덱스에 있는 숫자가 10일 경우, 해당 자리를 0으로 바꾸고, 앞자리 숫자에 1을 더한다.

for(int i = lastIdx; i > 0; i--){
  if(digits[i] == 10){
    digits[i] = 0;
    digits[i - 1]++;
  }else{
    break;
  }
}

for문을 빠져나오고 결과를 반환해야 하는데, digits[0]가 10일 수 있어서 처리를 해줘야한다. 반환할 정수 배열 result를 선언하고 digits.length + 1로 생성한다. 0번째와 1번째에 각각 1과 0을 할당한다.
만약 digits.length가 2보다 크면 digits의 인자들 각 자리에 할당한다.

if(digits[0] == 10){
  int[] result = new int[digits.length + 1];
  result[0] = 1;
  result[1] = 0;
  
  for(int i = 2; i < result.length; i++){
    result[i] = digits[i - 1];
  }
  
  return result;
}

digits[0]이 10이 아닌 경우에는 digits를 반환하면 된다.

return digits;

All Code

class Solution {
    public int[] plusOne(int[] digits) {
        int lastIdx = digits.length - 1;
        
        digits[lastIdx]++;
        
        for(int i = lastIdx; i > 0; i--){
            if(digits[i] == 10){
                digits[i] = 0;
                digits[i - 1]++;
            }else{
                break;
            }
        }

        if(digits[0] == 10){
            int[] result = new int[digits.length + 1];
            result[0] = 1;
            result[1] = 0;
            
            if(digits.length > 2){
                for(int i = 2; i < result.length; i++){
                    result[i] = digits[i - 1];
                }
            }

            return result;
        }
        
        return digits;
    }
}
profile
내 마음대로 코드 작성하는 세상

0개의 댓글