프로그래밍/[ Python ] 24

[python] pass, continue, break 활용법

안녕하세요, 오늘은 정말 간단한 python에서 pass, continue, break 문법 각각의 역할과 활용법에 대해서 정리해보겠습니다. 쉽게 정리하자면, pass : 아무 동작도 하지 않습니다. 반복문에서 아무런 영향을 끼치지 않습니다. continue : 반복문에서 다음 loop로 건너뛰면서 loop는 지속됩니다. break : 반복문을 멈추고 loop 밖으로 나갑니다. 말로 설명하는 것보다 쉽게 이해할 수 있도록 아래 예시로 정리하겠습니다. pass는 왼쪽의 결과에서 볼 수 있듯이 코드에 아무런 영향을 끼치지 않습니다. 따라서 pass는 주로 조건문에서 별다른 행동이 필요하지 않을 때, 또는 class 생성시 초기에 별다른 값이 없을때 전체 코드 동작을 확인하기 위해 임시적으로 활용하기도 합니다..

[연결 리스트] 두 수의 덧셈

* leetcode 2. Add Two Numbers Q. 역순으로 저장된 연결 리스트의 숫자를 더하라 # 입력 (2 -> 4 -> 3) + (5 -> 6 -> 4) # 출력 7 -> 0 -> 8 # 설명 342 + 465 = 807 풀이. 전가산기 구현 def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode: root = head = ListNode(0) carry = 0 while l1 or l2 or carry: sum = 0 # 두 입력값의 합 계산 if l1: sum += l1.val l1 = l1.next if l2: sum += l2.val l2 = l2.next # 몫(올림)과 나머지(값) 계산 carry, val = divmod(..

[연결 리스트] 역순 연결 리스트

* leetcode 206. Reverse Linked List Q. 연결 리스트를 뒤집어라. # 입력 1->2->3->4->5->Null # 출력 5->4->3->2->1->Null 풀이 1. 반복 구조로 뒤집기 def reverseList(head: ListNode) -> ListNode: node, prev = head, None # node.next를 이전 prev 리스트로 계속 연결하면 뒤집어진 연결 리스트를 얻을 수 있다. while node: next, node.next = node.next, prev prev, node = node, next return prev ### 초기화 node = 1->2->3->4->5->None prev = None while [1] next = 2(->3->..

[연결 리스트] 두 정렬 리스트의 병합

* leetcode 21. Merge Two Sorted Lists Q. 정렬되어 있는 두 연결 리스트를 합쳐라 # 입력 1->2->4, 1->3->4 # 출력 1->1->2->3->4->4 풀이 1. 재귀 구조로 연결 def mergeTwoLists(l1: ListNode, l2: ListNode) -> ListNode: # 작은 값이 왼쪽에 오게 if (not l1) or (l2 and l1.val > l2.val): l1, l2 = l2, l1 # next는 그 다음 값이 엮이도록 재귀 호출 if l1: l1.next = mergeTwoLists(l1.next, l2) return l1

[연결 리스트] 팰린드롬 연결 리스트

* leetcode 234. Palindrome Linked List Q. 연결리스트가 팰린드롬 구조인지 판별하라. # 입력 1->2 # 출력 false # 입력 1->2->2->1 # 출력 true 풀이 1. 리스트 변환 # 연결 리스트를 파이썬의 리스트로 변환시켜 풀이 def isPalindrome(head: ListNode) -> bool: q: List = [] if not head: return True node = head # 리스트 변환 while node is not None: q.append(node.val) node = node.next # 판별 while len(q) > 1: if q.pop(0) != q.pop(): # 인덱스를 지정하여 처음과 끝 값을 비교 return False ..

[배열] 주식을 사고팔기 가장 좋은 시점

* leetcode 121. Best Time to Buy and Sell Stock Q. 한 번의 거래로 낼 수 있는 최대 이익을 산출하라. # 입력 [7, 1, 5, 3, 6, 4] # 출력 5 # 1일 때 사서 6일 때 팔면 최대 5의 이익을 얻는다. 풀이 1. 브루트 포스로 계산 # O(n^2)로 사고 팔고를 반복하여 최대 이익을 구한다. def maxProfit(prices: List[int]) -> int: max_price = 0 for i, price in enumerate(prices): for j in range(i, len(prices)): max_price = max(prices[j] - price, max_price) return max_price 이 풀이법은 시간 복잡도가 O(n..

[배열] 자신을 제외한 배열의 곱

* leetcode 238. Product of Array Except Self Q. 배열을 입력받아 output[i]가 자신을 제외한 나머지 모든 요소의 곱셈 결과가 되도록 출력하라. # 입력 [1, 2, 3, 4] # 출력 [24, 12, 8, 6] # 나눗셈을 하지 않고 O(n)으로 풀이하라. 풀이 1. 왼쪽 곱셈 결과에 오른쪽 값을 차례대로 곱셈 # 자신을 제외한 왼쪽 곱셈 결과 # [1, 1, 2, 6] # 자신을 제외한 오른쪽 곱셈 결과 # [24, 12, 4, 1] # 이 둘을 곱하면 # [ 1, 1, 2, 6] # [24, 12, 4, 1] # [24, 12, 8, 6] -> 답 def productExceptSelf(nums: List[int]) -> List[int]: out = [] ..

[배열] 배열 파티션 1

* leetcode 561. Array Partition 1 Q. n개의 페어를 이용한 min(a, b)의 합으로 만들 수 있는 가장 큰 수를 출력하라. # 입력 [1, 4, 3, 2] # 출력 [4] # 설명 n은 2가 되면, 최대 값은 4이다. min(1, 2) + min(3, 4) = 4 풀이 1. 오름차순 풀이 최대 min()을 만들기 위해서 내림차순으로 배열을 만들면 항상 최대 min() 페어를 만들 수 있다는 점을 활용한다. 이때, 문제에서 배열 입력값은 2n개일 것이기 때문에 오름차순으로도 같은 결과가 나온다. def arrayPairSum(nums: List[int]) -> int: sum = 0 pair = [] nums.sort() for n in nums: pair.append(n) ..

[배열] 새 수의 합

* leetcode 15. 3Sum Q. 배열을 입력받아 합으로 0을 만들 수 있는 3개의 앨리먼트를 출력하라 # 입력 nums = [-1, 0, 1, 2, -1, -4] # 출력 [ [-1, 0, 1], [-1, -1, 2] ] 풀이 1. 브루트 포스로 계산 # 3개의 포인터를 이용하여 모두 더해서 0이 되는 값들을 찾는다. def threeSum(nums: List[int]) -> List[List[int]]: results = [] nums.sort() # n^3 반복 for i in range(len(nums) - 2): # 중복값 제거 if i > 0 and nums[i] == nums[i - 1]: continue for j in range(i + 1, len(nums) - 1): if j >..

[배열] 빗물 트래핑

* leetcode 42. Trapping Rain Water Q. 높이를 입력받아 비 온 후 얼마나 많은 물이 쌓일 수 있는지 계산하라. # 입력 [0, 1, 0, 2, 1, 0, 1, 3, 2, 1, 2, 1] # 출력 6 높이와 너비 모든 공간을 차례대로 모두 살펴보면 O(n^2)에 풀이가 가능하지만 효율적이지 않기 때문에 투 포인터나 스택을 사용하여 O(n)으로 풀이해야 한다. 풀이 1. 투 포인터를 최대로 이동 def trap(height: List[int]) -> int: if not height: return 0 volume = 0 left, right = 0, len(height) - 1 left_max, right_max = height[left], height[right] while l..