목록배열문제 (7)
DevSSOM
연습문제 : 세번째로 큰 숫자 찾아내기 0보다 큰 정수들의 배열이 주어짐. 이 배열에서 세번째로 큰 수를 찾아내봐. 예를 들어서, [2, 8, 19, 37, 4, 5, 12, 50, 1, 34, 23] 가 입력으로 주어졌을 경우 가장 큰 수는 50, 두번째로 큰 수는 37, 세번째로 큰 수는 34임. 따라서 34를 반환해야함. 시간 복잡도를 고려하면서 여러가지 방법으로 문제 풀어보기. def thirdMax(nums): return 0 def main(): print(thirdMax([2, 8, 19, 37, 4, 5, 12, 50, 1, 34, 23])) # should return 34 if __name__ == "__main__": main() >>> def thirdMax(nums): nums.s..
연습문제 : 배열의 회전 정수들이 포함되어 있는 배열과, 숫자 k가 입력으로 주어짐. 이때 해당 배열을 k 만큼 회전 시켜봐. 예를 들어서, [1, 2, 3, 4, 5, 6, 7, 8, 9] 와 4가 입력으로 주어졌을 경우 [6,7,8,9,1,2,3,4,5] 를 반환하면 됨. k 는 배열의 길이 n 보다 작다고 가정. 다양한 방법으로 풀어 볼 수 있음. (추가) 공간 복잡도 O(1)으로 풀 수 있는 방법도 생각. 이때 주어진 함수 partialReverse를 활용해도 됨. # 이 함수를 수정 해 주세요. def rotateArray(nums, k): return nums # 다음 함수는 추가적인 공간 사용 없이 배열의 일부를 뒤집어 주는 함수입니다. # 예를 들어, nums = [1,2,3,4,5] # ..
연습문제 : 0 이동시키기 여러 개의 0과 양의 정수들이 섞여 있는 배열이 주어짐. 이 배열에서 0들은 전부 뒤로 빼내고, 나머지 숫자들의 순서는 그대로 유지한 배열을 반환하는 함수를 만들어봐. 예를 들어서, [0, 8, 0, 37, 4, 5, 0, 50, 0, 34, 0, 0] 가 입력으로 주어졌을 경우 [8, 37, 4, 5, 50, 34, 0, 0, 0, 0, 0, 0] 을 반환하면 됨. 공간 복잡도 O(1)으로 이 문제를 풀 수 있음? def moveZerosToEnd(nums): return nums def main(): print(moveZerosToEnd([0, 8, 0, 37, 4, 5, 0, 50, 0, 34, 0, 0])) if __name__ == "__main__": main() >..
연습문제 : 중복된 수 제거하기 0보다 큰 정수들이 있는 리스트가 주어짐. 이 리스트는 작은 것부터 큰 순서대로 오름차순 정렬이 되어있으며, 중복을 포함함. 이 리스트에서 중복된 수를 없애고 정렬되어 있는 리스트를 출력해봐. 예를 들어 [1, 1, 2, 2, 2, 2, 5, 7, 7, 8] 이 입력되었다면, 중복되어 있는 ‘1’ 1개, ‘2’ 3개, ‘7’ 1개를 제거하고 [1, 2, 5, 7, 8]을 출력하면 됨. def removeDuplicate(nums): return [] def main(): print(removeDuplicate([1, 1, 2, 2, 2, 2, 5, 7, 7, 8])) # [1, 2, 5, 7, 8]을 리턴해야 합니다 if __name__ == "__main__": main..
연습문제 : 가장 큰 부분합 구하기 정수들의 리스트가 입력으로 들어옴. 이 정수들의 리스트를 일부분만 잘라내어 모두 더했을 때의 값을 부분합이라 부름. 이때 가장 큰 부분합을 구해봐. 예를 들어, [-10, -7, 5, -7, 10, 5, -2, 17, -25, 1]이 입력으로 들어왔다면 [10, 5, -2, 17]을 모두 더한 30이 정답. ※입력에는 최소 하나 이상의 양수가 존재. ※이 문제에는 여러 종류의 풀이법이 존재. 각 풀이법의 시간 복잡도를 고려하면서 여러가지 방법으로 문제를 풀어봐. def maxSubArray(nums): return 0 def main(): print(maxSubArray([-10, -7, 5, -7, 10, 5, -2, 17, -25, 1])) # 30이 리턴되어야 합..
연습문제 : 중복된 하나의 숫자 찾아내기 숫자들의 배열이 주어짐. 이 배열은 길이 n을 가지며, 1부터 n-1까지의 숫자로 이루어져 있음. 모든 숫자가 배열에 단 한번씩만 나타남. 그런데, 딱 하나의 수가 배열에 두 번 등장함. 이 중복되는 숫자를 찾아내봐. 예를 들어서, [1, 5, 2, 4, 5, 6, 3] 를 살펴보면, 배열의 길이는 7이며, 따라서 1~6까지의 숫자들이 한번씩 등장. 그런데 5만 한번 더 등장한 것. 따라서 이 경우에는 5를 찾아내면 됨. def findDuplicate(nums): return 0 def main(): print(findDuplicate([1, 5, 2, 4, 5, 6, 3])) if __name__ == "__main__": main() >>> 내가 작성해본 답..
연습문제 : 가장 큰 두 수의 차 보다 큰 정수들의 배열이 주어졌다고 하자. 여기서 가능한 모든 서로 다른 두 숫자의 차이를 고려해보고, 이중 가장 큰 차이를 반환하는 함수를 적어봐. 예를 들어서, [2, 8, 19, 37, 4, 5, 12, 50, 1, 34, 23] 가 입력으로 주어졌을 경우 가장 큰 차이를 내는 숫자쌍은 50-1 = 49임. 두 수의 차에 해당하는 값을 반환하면 됨. 위 예시의 경우, 49를 반환함. 양의 값을 반환해야 함. 위 예시의 경우 -49가 아니라 49를 반환해야 함. 배열의 길이는 2보다 크거나 같다고 가정. 이 문제에는 여러 종류의 풀이법이 존재함. 각 풀이법의 시간 복잡도를 고려하면서 여러가지 방법으로 문제를 풀어봐. def maxTwoDiff(nums): nums.s..