코딩테스트(python)

7장 9번 ~ 12번

Dragon_yun 2021. 5. 30. 21:54

9번 문제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#풀이 1
class Solution:
    def threeSum(self, nums):
        print(nums)
        Sum = []
        if nums == [] :
            return nums
        elif nums is 0 :
            return None
        
        else:
            for i in range(len(nums)-2):
                for j in range(i+1,len(nums)-1):
                    for k in range(j+1,len(nums)):
                           if nums[i] + nums[j] + nums[k] ==0 and sorted([nums[i],nums[j],nums[k]]) not in Sum :
                                Sum.insert(len(Sum),sorted([nums[i],nums[j],nums[k]]))
                                                             
            return Sum
 
#풀이 2
 
class Solution:
    def threeSum(self, nums):
        results = []
        nums.sort()
        
        for i in range(len(nums) -2):
            if i>0 and nums[i]==nums[i-1]:
                continue
            left, right = i+1len(nums) -1
            while left < right:
                sum = nums[i] + nums[left] + nums[right]
                if sum < 0:
                    left +=1
                elif sum > 0:
                    right -=1
                else:
                    results.append((nums[i],nums[left],nums[right]))
                
                    while left < right and nums[left] == nums[left+1]:
                        left +=1
                    while left < right and nums[right] == nums[right -1]:
                        right -=1
                    left +=1
                    right -=1
                   
        return results
cs

 

10번 문제

sort() 를 해서 짝수번째값이 가져와서 더하면 그값이 파티션들의 min 값들을 더한 max 값이 된다!? -> 새로운 사실

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#풀이 1 (280ms)
class Solution:
    def arrayPairSum(self, nums: List[int]) -> int:
        nums.sort()
        Sum = 0
        stack = []
        for n in range(int(len(nums)/2)):
            Sum += min(nums[2*n],nums[2*n+1])             
        return Sum
#풀이 2 (252ms)
class Solution:
    def arrayPairSum(self, nums: List[int]) -> int:
        return  sum(sorted(nums)[::2])
 
cs

 

 

11번 문제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#풀이1 (240ms) 
class Solution:
    def productExceptSelf(self, nums: List[int]) -> List[int]:
        out = []
        p =1 
        for i in range(0,len(nums)):
            out.append(p)
            p = p * nums[i]
        p = 1
        
        for i in range(len(nums)-1,0-1,-1):
            out[i] = out[i] * p
            p = p * nums[i]
            
        return out
        
cs

 

12번 문제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#풀이 1 (시간 초과)
class Solution:
    def maxProfit(self, prices: List[int]) -> int:
        profit = []
        if len(prices)-1<=0:
            return 0
        
        for i in range(len(prices)-1):
            for j in range(i+1,len(prices)):
                if prices[j] - prices[i] <0 :
                    profit.append(0)
                else:
                    profit.append(prices[j] - prices[i])
                
                
        return max(sorted(profit))
cs

 

 

1
2
3
4
5
6
7
8
9
10
11
12
#풀이2 (240ms) 
class Solution:
    def maxProfit(self, prices: List[int]) -> int:
        profit =0
        min_price = sys.maxsize
        
        for price in prices:
            min_price = min(min_price,price)
            profit = max(profit,price - min_price)
        
        return profit
        
cs

'코딩테스트(python)' 카테고리의 다른 글

6장 4번 ~ 7장 2번  (0) 2021.05.23
6장 1~3번 문제  (0) 2021.05.16
파이썬 알고리즘 인터뷰  (0) 2021.05.16