Introfor

[Intro] Make Array Consecutive 2 본문

Programming_prob/Codesignal

[Intro] Make Array Consecutive 2

YongArtist 2020. 7. 18. 16:57

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.

statues라는 리스트가 주어지면, 그 안에 있는 수에서 그 수의 사이 값이 몇 개가 필요한지 개수를 반환하는 문제다.
예를 들어서, [6, 2, 3, 8]이 있으면 2, 3, [4], [5], 6, [7], 8 이렇게 대괄호 처리가 된 요소만 없는 것을 알 수 있다. 이거의 개수는 3개이므로 3을 반환한다.

def makeArrayConsecutive2(statues):
	count = 0
	statues.sort()
	for i in range(max(statues)-min(statues)-1):
		if statues[i]+1 != statues[i+1]:
			statues.insert(i+1, statues[i]+1)
			count += 1
	return count

개수를 세기 위한 count 변수를 선언하고, 사이의 수를 쉽게 구하기 위해 sort()로 정렬한다. 마지막 수는 비교할 필요가 없기 때문에 리스트에서 최댓값과 최솟값으로 두 수 사이에 존재하는 수의 개수를 구하고 거기에 -1을 더한다. 그리고 원인덱스가 가리키는 값 +1의 값이 다음 인덱스가 가리키는 값과 다르면 다음에 있어야 할 값을 넣어주고 카운트를 센다.

 

def makeArrayConsecutive2(statues):
    return max(statues) - min(statues) - len(statues) + 1

다른 분이 푼 코드
리스트의 최댓값과 최솟값의 차에 리스트 크기를 빼고 난 값에 +1을 해주면 된다.

최댓값과 최솟값에 사이에 존재하는 수의 개수를 구하고, 그 사이에 존재하는 수를 빼준 후 마지막 +1을 해준다.

 

'Programming_prob > Codesignal' 카테고리의 다른 글

[Intro] matrixElementsSum  (0) 2020.07.18
[Intro] almostIncreasingSequence  (0) 2020.07.18
[Intro] shapeArea  (0) 2020.07.18
[Intro] adjacentElementsProduct  (0) 2020.07.18
[Intro] checkPalindrome  (0) 2020.07.18
Comments