Computer Science/알고리즘 문제풀이

[codesignal][python] 4. Make Array Consecutive 2BACK

codesignal.com

 

Coding Tests and Assessments for Technical Hiring | CodeSignal

Learn how you can go beyond resumes in technical hiring with a state-of-the-art assessment platform and advanced coding tests

codesignal.com

level : easy

Question:

Ratiorg got statues of different sizes as a present from CodeMaster for his birthday, each statue having an non-negative integer size. Since he likes to make things perfect, he wants to arrange them from smallest to largest so that each statue will be bigger than the previous one exactly by 1. He may need some additional statues to be able to accomplish that. Help him figure out the minimum number of additional statues needed.

배열이 주어지면 배열의 원소들이 이어지는 숫자의 배열 (1씩 차이나는 배열)이 되기 위해서 모자라는 숫자가 몇개인지 반환

 

Example: 

For statues = [6, 2, 3, 8], the output should be
makeArrayConsecutive2(statues) = 3.

Ratiorg needs statues of sizes 4, 5 and 7.

[6,2,3,8] 이 주어지면 4,5,7이 있어야 연결되는 숫자배열이 될 수 있기 때문에 필요한 숫자들은 총 3개이므로 3 반환

 

My answer:


def makeArrayConsecutive(statues):
    statues.sort()
    return sum(b-a for a,b in zip(statues[:-1],statues[1:]))-len(statues)+1
  • [6,2,3,8]이 inputArray라면, sort 하면 [2,3,6,8]
  • inputArray[:-1] 은 [2,3,6], inputArray[1:] 은 [3,6,8] 
  • zip함수를 사용해 [(2,3),(3,6),(6,8)] 으로 만들어줌
  • 차이를 빼주고 실제 숫자가 zip함수를 사용해서 얻어진 List 길이만큼 차이나기 때문에 -len()+1 해준다

 

reference code:


def makeArrayConsecutive(statues):
    statues.sort()
    return statues[-1]-statues[0]-len(statues)+1
  • 그냥 가장 큰 숫자에서 가장 작은 숫자를 빼고 배열이 갖는 길이와의 차이가 얼만지로 간단하게 계산 구현 가능