[Leetcode] 66. Plus One

Algorithm|2021. 7. 26. 20:07
반응형

Identifying the Problem

주어진 수열을 10진수라고 생각하고 +1한 값을 수열로 리턴한다.

 

Ex) [9,9] -> [1,0,0]

 

Constraints:

  • 1 <= digits.length <= 100
  • 0 <= digits[i] <= 9

Organizing thoughts

1. 수열의 끝 부분을 +1 한다.

1-1 그대로 끝나거나

1-2 Ex) 처럼 자리수가 바뀌는 경우가 있다.

자리 수가 바뀐다 = 앞 자리가 9이다. 이므로

 

2. 앞자리가 9가 아니라면 더한 값을 리턴한다.

 

3. 앞자리가 9인 경우가 본게임이다.

999 같은 경우를 생각해보면

9 9 10 이 되고 

9 10 0 이 되고

10 0 0 이 되고

결국 1 0 0 0 이 된다.

이 과정에서 유추할 수 있는 것은

값이 10으로 바뀌면 0으로 초기화하고 이전 순서의 값을 +1 시킨다는 것이다.

그렇다면 첫 자리가 10이되면, 자리 수가 바뀌어야 되는데, 수열의 size는 int * 3 만큼 할당 되어있는 상태이다.

 

digitsize만큼 할당되어 있는 수열을 다시 동적할당 해야하는 건가?
 

라고 생각해 remalloc 하는 방법을 찾아서 고군분투했지만 더 좋은 방법이 떠올랐다.

4. 처음부터 degitSize + 1 만큼 동적할당을 한 정답 수열을 만들어 놓는 것이다.

4-1 다만 degitSize번 부분은 NULL로 두었다가 자리수가 바뀌면 이 부분을 0으로 채우면 된다.

Sourcecode

int* plusOne(int* digits, int digitsSize, int* returnSize){
 
    int n = digitsSize -1;
    int i=0;

    int* ret = (int*)malloc(sizeof(int)*(digitsSize+1));
    
    
    *returnSize = digitsSize;
    
    
    (*(digits+n))++;
    
    
    
    while(i<digitsSize)
    {
     *(ret+i) = *(digits+i);
     i++;
    }
   *(ret+i) = NULL; //4-1
    
    
    
    if(*(ret+n) == 10) //+1 을 한 결과 10이 된 경우
    {
        
        for(int i=n;i>0;i--)
        {
         if(*(ret+i) == 10)
         {
          *(ret+i) = 0; //0으로 초기화하고
          (*(ret+i-1))++; //이전 값을 +1 해준다

         }
        }
     

    }
    
    if(*(ret) == 10) //자리수가 바뀌는 경우
    {
        *ret = 1; //맨 앞은 1로 바꾸고
        *(ret+digitsSize) = 0; //NULL->0으로 바꾸어준다
        (*(returnSize))++;  //최종 자리수를 +1 한다.
    }

    
    return ret;
}

Mistake

1을 증가시키는 과정에서 (degit+i-1)++ 로만 둬 계속 오류가 발생했다.

(degit+i-1)++ 이거는 포인터 위치를 바꾸는 거고, (*(degit+i-1))++ 이렇게 해야 맞다.

그냥 degit[i-1]++ 이렇게 쓰도록하자.

 

New things learned

글을 쓰면서 느낀건, 코드가 너무 조잡하고 복잡한 것 같다. 

다시 풀어보도록 하겠다.

반응형

'Algorithm' 카테고리의 다른 글

[Leetcode] 70. Climbing Stairs  (0) 2021.07.27
[Leetcode] 67. Add Binary  (0) 2021.07.27
[Leetcode] 58. Length of Last Word  (0) 2021.07.26
[Leetcode] 53. Maximum Subarray  (0) 2021.07.25
[Leetcode] 35. Search Insert Position  (0) 2021.07.25

댓글()